WSO2 EI,在Sequence中获取HTTP请求的消息内容

时间:2017-08-12 12:56:15

标签: wso2 wso2esb wso2ei

我一直在阅读this documentation more than two weeks,但仍然很难理解一些概念。

让我们考虑简单的案例。 用户向我们的API发出请求,然后EI必须根据请求正文调用特定端点并显示响应

现在获取HTTP请求的数据存在一个主要问题。

我知道可以通过Property Mediator访问它,但this documentation无法理解任何内容。

  1. 如果用户提出GET这样的请求:

    https://my-ei-domain.com:8280/myapi/mymethod?query1=1&query2=2
    

    如何获得query1query2的价值

  2. 如果用户使用POST表单数据提出urlencoded请求如何获取这些数据?

  3. 如果用户向POST机构提出JSON请求,请执行以下操作:

    {
       "var1": "one",
       "var2": 2,
       "var3": {
             "var3_var1": "two"
        }
    }
    

    如何获取这些变量的值?

  4. 用户向POST正文发出XML次请求:

    <body>
         <var1>1</var1>
         <var2>2</var2>
         <var3>
             <var1>3</var1>
         </var3>
    <body>
    

    如何获得这些值?

  5. 下一个问题。有时用户会在请求的标头内发送一些变量。如何获得它们?

  6. 这些案例在文档中没有很好地描述。即使它们是,它们只分散在多个页面中。

2 个答案:

答案 0 :(得分:1)

  1. 如果用户提出这样的GET请求...... 。使用如中所述 文档URL模板或URI映射 https://docs.wso2.com/display/EI611/Working+with+APIs
  2. 如果用户使用urlencoded表单数据发出POST请求如何获取它们...... 如上所述,没有其他方法可以获取数据。实际上Content-Type用于识别数据传输的方式,我认为(因为ESB服务器使用apache http核心库,广泛使用)将能够处理param值。无论如何,这很容易重现。创建休息服务,发送urlencode请求并查看其工作原理。
  3. 如果用户使用JSON正文发出POST请求...... 文档中描述了如何在synapse引擎https://docs.wso2.com/display/ESB480/JSON+Support中使用json的规则(段落从JSON访问内容有效载荷
  4. 用户使用XML正文发布POST请求以暂停服务?到webservice?无论如何,xpath通常用于访问xml文档的某些部分。但是,突触引擎必须识别收到的xml文档并解析它。引擎依赖于Content-Type,详情请参见https://docs.wso2.com/display/ESB480/Working+with+Message+Builders+and+Formatters
  5. 下一个问题。有时用户会在请求的标头内发送一些变量。如何获得它们?在这里how to read http headers in esb
  6. 大多数文档中的答案或易于在网上找到。

答案 1 :(得分:0)

您的问题很长,我可以看到您正在请求有关如何实现这些目标的教程。我希望以下Wso2相关教程可以帮助您:

Enterprise Service Integration

Service Orchestration

Restful Integration

作为一个例子,让我解释一些问题的答案:

从以下查询中获取信息:

http://127.0.0.1:8280/pizzashop/api/menu/pizza?val=thin&type=crust

你可以使用这样的财产调解员:

<property name="Type" expression="$ctx:query.param.type"></property>
<property name="Val" expression="$ctx:query.param.val"></property>

WSO2使用调解员来完成大部分任务。例如,payloadFactory mediator可用于处理json和xml主体并对其进行转换。处理以下json

 { "payment":
        {
            "amount_lkr": "175.00",
            "card_no": "1234-5678-9876-5432"
        }
    }

我们可以使用payloadFactory中介,如下所示:

 <payloadFactory media-type="json">
             <format>{"purchaseInformation": {"amount": "$1","cc": "$2"}}</format>
             <args>
                    <arg evaluator="json" expression="$.payment.amount_lkr"></arg>
                    <arg evaluator="json" expression="$.payment.card_no"></arg>
             </args>
    </payloadFactory>

同样,此调解器和其他调解器也可用于处理POST请求中的xml。

请从教程中学习。细节太宽泛,无法在一个答案中解释