WSO2 EI, получение содержимого сообщения HTTP-запроса внутри Sequence

Я читаю эту документацию более двух недель, но до сих пор не могу понять некоторые концепции.

Рассмотрим простой случай. Пользователь делает запрос к нашему API, затем EI должен вызвать конкретную конечную точку в зависимости от тела запроса и показать ответ.

Теперь основная проблема с получением данных HTTP-запроса.

Я знаю, что к нему можно получить доступ через Property Mediator, но эта документация ничего не помогает понять.

  1. если пользователь делает GET запрос следующим образом:

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

    Как можно получить значения query1 и query2

  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. Следующая проблема. Иногда пользователи отправляют некоторые переменные внутри заголовков запросов. Как их получить?

Эти случаи плохо описаны в документации. Даже если они есть, они просто разбросаны по нескольким страницам.


person Mr.D    schedule 12.08.2017    source источник


Ответы (2)


  1. если пользователь делает запрос GET, подобный этому... . Использование, как описано в документации Шаблон URL-адреса или сопоставление URI https://docs.wso2.com/display/EI611/Working+with+API
  2. Если пользователь делает POST-запрос с данными формы в кодировке urlencode, как их получить... Нет другого способа получить данные, как описано выше. На самом деле Content-Type используется для определения того, как передаются данные, и я думаю (поскольку сервер ESB использует apache http core lib, широко используется) сможет обрабатывать значения параметров. Во всяком случае, это легко воспроизвести. Создайте сервис отдыха, отправьте запрос urlencode и посмотрите, как он работает.
  3. Если пользователь делает POST-запрос с телом JSON, подобным этому... Правила описаны в документации по работе с json в движке синапса https://docs.wso2.com/display/ESB480/JSON+Support (параграф Доступ к содержимому из полезных данных JSON)
  4. Пользователь делает запрос POST с телом XML: для отдыха службы? на веб-сервис? В любом случае, xpath обычно используется для доступа к определенным частям XML-документов. Но механизм синапса должен идентифицировать полученный XML-документ и проанализировать его. Движок использует Content-Type, подробности здесь https://docs.wso2.com/display/ESB480/Working+with+Message+Builders+and+Formatters
  5. Следующая проблема. Иногда пользователи отправляют некоторые переменные внутри заголовков запросов. Как их получить? Здесь https://stackoverflow.com/questions/25854766/how-to-read-http-headers-in-esb

Большинство ответов есть в документации или их легко найти в Интернете.

person simar    schedule 24.10.2017

Ваш вопрос довольно длинный, и я вижу, что вы запрашиваете учебные пособия о том, как их достичь. Я надеюсь, что следующие руководства, связанные с Wso2, помогут вам:

Интеграция корпоративных служб

Оркестровка службы

Интеграция с Restful

В качестве примера позвольте мне объяснить ответы на несколько ваших вопросов:

Чтобы получить информацию из запроса, подобного следующему:

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 использует посредников для решения большинства задач. Например, для обработки тела 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>

Точно так же этот посредник и другие могут использоваться для обработки xml в запросе POST.

Пожалуйста, учитесь на уроках. Детали слишком широки, чтобы их можно было объяснить в одном ответе

person Riyafa Abdul Hameed    schedule 13.08.2017