Можно ли присоединиться к ответу SOAP с использованием общего ключа в azure APIM

#azure #azure-api-management

#azure #azure-api-management

Вопрос:

Привет, есть ли какой-либо способ присоединиться к ответу soap на основе любого общего свойства в azure apim, например, предположим, что у меня есть

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <GetOpenOrdersResponse xmlns="http://tempuri.org/">
            <GetOpenOrdersResult xmlns:a="http://schemas.datacontract.org/2004/07/FazioAPISoap" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:OrderSummary>
                    <a:order_header_data>
                        <a:Bar>false</a:Bar>
                        <a:Foo>Things</a:Foo>
                    </a:order_header_data>
                    <a:order_id>10001</a:order_id>
                </a:OrderSummary>
                
            </GetOpenOrdersResult>
        </GetOpenOrdersResponse>
    </s:Body>
</s:Envelope>
  

и у меня есть другой ответ с другими деталями с тем же идентификатором заказа

Я вызвал эти API, используя политику отправки запросов apim. Я пытался использовать context.Variable bbut, но это не сработало. Могу ли я объединить эти ответы, используя политику возврата-ответа или любым другим способом?

Ответ №1:

Вы можете применить Liquid templates в рамках политик управления API Azure.

 <outbound>
   <base />

   <!--Create JSON Response via liquid template-->
   <set-body template="liquid">
   {
       "orderId" : "{{body.GetOrderDetailsResponse.OrderId}}",
       "orderDate" : "{{body.GetOrderDetailsResponse.OrderDate | Date: "dd/MM/yyyy"}}",
       "orderLines" : [
           {% JSONArrayFor orderline in body.GetOrderDetailsResponse.OrderLines %}
           {
               "product" : "{{orderline.Product}}",
               "amount" : "{{orderline.Amount}}"
           }
           {% endJSONArrayFor %}
       ]
   }
   </set-body>

   <!--Set correct content type-->
   <set-header name="Content-Type" exists-action="override">
      <value>application/json</value>
   </set-header>
</outbound>
  

Переменная контекста также доступна из шаблонов Liquid. Внутри шаблона Liquid вам необходимо применить следующие обозначения: {{context.Request.Url.Query[“orderId”]}} .

Для получения более подробной информации вы можете обратиться к этой статье.

Комментарии:

1. У меня есть 2 ответа, два из которых объединяются в 1 на основе orderid, и мне нужно использовать только soap-ответ, а не json