【问题标题】:Does WSO2 ESB support REST to REST with JSON format?WSO2 ESB 是否支持 JSON 格式的 REST 到 REST?
【发布时间】:2012-04-13 22:17:20
【问题描述】:

我想使用 WSO2 ESB 作为网关。我正在使用版本 4.0.3 我有一些现有的带有 JSON 消息的 RESTful 服务。我知道 ESB 现在支持 REST API。但我仍然找不到 WSO2 ESB REST 到 REST 的解决方案。我的意思是所有后端服务都是带有 JSON 格式的 RESTful。谁能帮帮我?

【问题讨论】:

    标签: json rest wso2 wso2esb esb


    【解决方案1】:

    是的,我们确实支持 REST -REST 服务,这意味着它被归类为协议切换,对于 WSO2 ESB,它具有 REST API,它使您能够处理传入的 REST 或任何其他格式并进行调解并将它们传递到后端(不管是哪种协议)

    以下代理允许您将传入的 REST 消息传输到后端 REST 服务 基本上,如果您需要访问传入的表单数据,您可能必须使用

    它允许您提取传入的 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>
    

    【讨论】:

      【解决方案2】:

      WSO2 ESB 为接收、处理和中介 REST 调用提供了出色的支持。请在[1][2] 找到样品以获取更多信息。

      【讨论】:

      • 谢谢,蒂利尼。但以上 2 个示例仅显示了 WSO2 ESB 接收 JSON REST 调用的用法。如何使用 JSON 消息处理后端 REST 服务的消息。支持吗?
      • 是的,它是受支持的。但是样本不可用,但您可以设置环境,如以下线程stackoverflow.com/questions/9605712/…中所述
      【解决方案3】:

      最新的 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"/>
      

      更多信息请访问here

      【讨论】:

        【解决方案4】:

        如果您不固定使用任何特定的 ESB,您可以查看 UltraESB - 这是所有 REST 方法的示例 [http://docs.adroitlogic.org/display/esb/Restful+Proxy+Services]并且对 JSON 也有很好的支持

        免责声明 - 我是 AdroitLogic 的创始人兼 CTO

        【讨论】:

        • 感谢您的建议,阿桑卡。我只想使用 ESB 作为我现有 RESTful 服务的网关。我将看看 UltraESB。也许对我有用。
        • 嗨,阿桑卡。我尝试了 UltraESB。这对我来说是一个很好的产品,可能适合我的应用。我只是有一个问题。它是免费和开源的吗?如果我想在企业应用程序上使用它有什么限制吗?谢谢。
        猜你喜欢
        • 1970-01-01
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多