Как объединить две переменные в одну в ответе? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть два API, добавленных в Azure API Management.Это в основном один и тот же API, но для разных сред.В целях мониторинга я хочу создать операцию, которая будет вызывать один и тот же метод в обоих API и объединить их результат в один.В настоящее время я работаю над поддельными API с поддельными данными.

Чтобы добиться этого, я создал пустой API с пустой операцией.Внутри этой операции я объявил следующие входящие политики:

<inbound>
    <set-variable name="env1" value="" />
    <set-variable name="env2" value="" />
    <send-request mode="new" response-variable-name="env1" timeout="20" ignore-error="false">
        <set-url>https://env1-api.azure-api.net/api/data</set-url>
        <set-method>GET</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
    </send-request>
    <send-request mode="new" response-variable-name="env2" timeout="20" ignore-error="false">
        <set-url>https://env2-api.azure-api.net/api/data</set-url>
        <set-method>GET</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
    </send-request>
    <base />
</inbound>

При тестировании операция под названием throws 500 (что, я полагаю, понятно, поскольку ответ не устанавливается).Когда я смотрю на вкладку Trace, я вижу два сообщения:

GET запрос к 'https://env1 -api.azure-api.net / api / data ' былотправлено, результат сохранен в переменной 'env1'.

GET запрос к 'https://env2 -api.azure-api.net / api / data ' отправлен, результат сохранен в 'Переменная env2 '.

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

API возвращают массив объектов в форме объекта JSON.Чего я хочу добиться - это объединить эти два ответа в один ответ, который будет возвращен операцией.Как мне составить ответ?

Помните, что в Azure я нуб, поэтому мой подход может быть слишком примитивным.Если у вас есть что-то лучше, я бы хотел услышать об этом.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Взгляните на политику возврата-ответа: https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#ReturnResponse

В set-body вы можете объединить эти две строки.

1 голос
/ 27 сентября 2019

Чтобы добавить к ответу Александра, в политике return-response есть два способа составить окончательное тело

  1. Использование выражений политики
<set-body>@{
    var output = new
    {
        success = true,
        var1 = context.Variables["var1"]
    };
    return JsonConvert.SerializeObject(output);
}</set-body>
Используйте жидкие шаблоны
<set-body template="liquid">{
"success": true,
"var1": "{{context.Variables["var1"]}}"
}</set-body>

Подробнее о политике set-body вы можете прочитать в ее документе.

...