#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