我想使用 WSO2 ESB 作为网关。我正在使用版本 4.0.3 我有一些现有的带有 JSON 消息的 RESTful 服务。我知道 ESB 现在支持 REST API。但我仍然找不到 WSO2 ESB REST 到 REST 的解决方案。我的意思是所有后端服务都是带有 JSON 格式的 RESTful。谁能帮我?
4 回答
是的,我们确实支持 REST -REST 服务,这意味着它被归类为协议切换,对于 WSO2 ESB,它具有 REST API,它使您能够处理传入的 REST 或任何其他格式并进行调解并将它们传递到后端(它不不管是哪种协议)
以下代理允许您将传入的 REST 消息传输到后端 REST 服务,如果您需要访问可能必须使用的传入表单数据
<messageFormatter contentType="application/x-www-form-urlencoded" class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
<messageBuilder contentType="application/x-www-form-urlencoded" class="org.apache.synapse.commons.builders.XFormURLEncodedBuilder"/>
它允许您提取传入的 REST 提交详细信息并根据需要进行任何调解
REST TO REST VIA REST API
<api name="studentSecureAPI" context="/SecureStudentRequest">
<resource methods="POST" uri-template="/student/{name}">
<inSequence>
<property name="REST_URI" expression="fn:substring($axis2:REST_URL_POSTFIX,16,fn:string-length($axis2:REST_URL_POSTFIX))"/>
<property name="AGE" expression="//xformValues//age"/>
<property name="STUDENT" expression="get-property('uri.var.name')"/>
<property name="DISABLE_CHUNKING" value="true" scope="axis2" type="STRING"/>
<property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
<property name="ContentType" value="application/x-www-form-urlencoded" scope="axis2" type="STRING"/>
<property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
<property name="REST_URL_POSTFIX" expression="$ctx:REST_URI" scope="axis2"/>
<payloadFactory>
<format>
<POST>
<age>$1</age>
</POST>
</format>
<args>
<arg expression="$ctx:AGE"/>
</args>
</payloadFactory>
<send>
<endpoint>
<address uri="http://localhost:9764/as/services/RestService"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</resource>
REST TO REST VIA SIMPLE PROXY :
<proxy name="StudentRequestProxy" transports="https http" startOnLoad="true" trace="disable">
<target>
<inSequence>
<property name="DISABLE_CHUNKING" value="true" scope="axis2" type="STRING"/>
<property name="ContentType" value="text/xml" scope="axis2" type="STRING"/>
<property xmlns:ns3="http://org.apache.synapse/xsd" name="Lang" expression="get-property('transport', 'Accept')" scope="default" type="STRING"/>
<log level="custom">
<property name="HTTP_METHOD IS###########" expression="$axis2:HTTP_METHOD"/>
</log>
<switch source="$axis2:HTTP_METHOD">
<case regex="GET">
<property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/>
</case>
<case regex="POST">
<property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
</case>
<default/>
</switch>
<send>
<endpoint>
<address uri="http://localhost:9764/as/services/RestService"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
</proxy>
最新的 ESB 版本 (4.8.1) 与 JSON REST 调用完美配合。尝试关注 payloadFactory 和属性中介,
<payloadFactory media-type="json">
<format>
{
"name":"$1",
"age":$2
}
</format>
<args>
<arg evaluator="json" expression="$ctx:name"/>
<arg evaluator="json" expression="$ctx:age"/>
</args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
更多信息可以在这里找到
如果您不固定使用任何特定的 ESB,您可以查看 UltraESB - 这是所有 REST 方法的示例 [http://docs.adroitlogic.org/display/esb/Restful+Proxy+Services] 并且有对 JSON 也有很好的支持
免责声明 - 我是 AdroitLogic 的创始人兼 CTO