是否可以在ESB REST代理服务中提取和/或传递查询参数

时间:2015-04-16 20:47:49

标签: wso2 wso2esb esb

我正在构建ReST to ReST代理服务。我需要能够将一些查询参数传递给与请求一起传入的服务。 E.g。

myhost.zz / proxyService富= 1和;巴= 2

当我定义这样的代理时 - 后来尝试提取' foo'我得到了。 那么有可能实现吗?

2 个答案:

答案 0 :(得分:2)

你需要定义一个API(如果你真的想要代理服务,请看这个答案的结尾):

<api xmlns="http://ws.apache.org/ns/synapse" name="proxyService" context="/proxyService">
   <resource methods="POST GET OPTIONS DELETE PUT">
      <inSequence>
         <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2" type="STRING"></property>
         <log level="custom">
            <property name="foo" expression="get-property('query.param.foo')"></property>
            <property name="bar" expression="get-property('query.param.bar')"></property>
         </log>
      </inSequence>
   </resource>
</api>

使用此网址调用它:http://host:port/proxyService?foo=12&bar=14

查看wso2-esb-service.log:INFO __SynapseService foo = 12,bar = 14

在&#34;资源&#34;中,您可以定义一个uri-template(URL Style = uri-template),例如&#34; / {scope} / *&#34;然后当您使用http://host:port/proxyService/toto?foo=12&bar=14呼叫您的api时,您可以访问&#34;范围&#34;使用get-property(&#39; uri.var.scope&#39;)

发送REST请求,使用带有uri-template的http端点,使用相同的逻辑:uri-template="http://other_host:port/Service/{uri.var.scope}/truc?abc={query.param.foo}&amp;dfc={query.param.bar}"

<强> - &GT; 如果要使用代理服务,可以访问查询参数,如下所示:

请求:http://esb:8280/services/MonService?param1=val1&param2=val2

<property name="PARAM1"
                   expression="tokenize(substring-after(syn:get-property('To'),'param1='),'&')"
                   scope="default"
                   type="STRING"/>

<property name="PARAM2"
                   expression="tokenize(substring-after(syn:get-property('To'),'param2='),'&')"
                   scope="default"
                   type="STRING"/>

答案 1 :(得分:0)

您可以使用synapse xpath变量$ url来读取查询参数值。 例如,检查这个[1]。

  1. Reading Dynamic query parameter in WSO2 APIM