我是WSO2 esb的新手。我想创建一个api,我想在api Url中添加动态参数到端点url。
我的终点网址与http://example.com/api/sync/{session_id}.json
我试图像
那样创建api<api name="rest" context="/sync">
<resource methods="GET" uri-template="/{id}">
<inSequence>
<log level="full">
<property xmlns:ns="http://org.apache.synapse/xsd"
name="uri.var.session"
expression="get-property('uri.var.id')"
scope="axis2"/>
</log>
<property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
<send>
<endpoint name="Mecars">
<http trace="enable"
method="get"
uri-template="http://example.com/sync/{+uri.var.session}.json"/>
</endpoint>
</send>
</inSequence>
</resource>
</api>
在log中我得到uri.var.session的值但是在端点Uri-template上它没有附加。
请指导我如何将api uri-template中的{id}值附加到终点uri-template?
答案 0 :(得分:5)
检查sample 我建议你直接在uri-template上使用属性mediator adn使用字符串连接,而不是添加&#34;变量+ .json&#34;在uri-template。
那是;
<property xmlns:ns="http://org.apache.synapse/xsd"
name="uri.var.session"
expression="get-property('uri.var.id')"
scope="axis2"/>
在上面的表达式中,使用&#34; .json&#34;来构造字符串连接以构造完整变量。结束。
答案 1 :(得分:3)
更改http端点uri模板,如下所示。
<http trace="enable" method="get" uri-template="http://example.com/sync/{uri.var.id}.json"></http>
以下是修改后的api配置。
<api xmlns="http://ws.apache.org/ns/synapse" name="rest" context="/sync">
<resource methods="GET" uri-template="/{id}">
<inSequence>
<log level="full">
<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.session" expression="get-property('uri.var.id')"></property>
</log>
<property name="REST_URL_POSTFIX" scope="axis2" action="remove"></property>
<send>
<endpoint name="Mecars">
<http trace="enable" method="get" uri-template="http://example.com/sync/{uri.var.id}.json"></http>
</endpoint>
</send>
</inSequence>
</resource>
</api>
答案 2 :(得分:3)
请从您的http端点删除'+'符号。它对我来说工作正常
示例API
<api xmlns="http://ws.apache.org/ns/synapse" name="Elastic Search Using NPI" context="/api/npi/professional/npi.json">
<resource methods="OPTIONS GET" uri-template="/{npi}">
<inSequence>
<log level="full">
<property name="uri.var.npi" expression="get-property('uri.var.npi')"></property>
</log>
<send>
<endpoint>
<http method="get" uri-template="example.com/{uri.var.npi}"></http>
</endpoint>
</send>
</inSequence>
</resource>
</api>
答案 3 :(得分:1)
您可以在属性介体中执行字符串连接,如下所示。
<property xmlns:ns="http://org.apache.synapse/xsd"
name="uri.var.session"
expression="fn:concat(get-property('uri.var.id'),'.json')"
scope="axis2"/>