我向Azure API管理添加了两个API。它基本上是相同的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的操作(我认为这是可以理解的,因为未设置任何响应)。当我查看“跟踪”选项卡时,我会看到两条消息:
已发送对“ https://env1-api.azure-api.net/api/data”的GET请求,结果存储在“ env1”变量中。
已发送对“ https://env2-api.azure-api.net/api/data”的GET请求,结果存储在“ env2”变量中。
基于此,我得出结论,这些呼叫正常运行。这就是我卡住的地方。我不知道如何在响应中合并这两个变量。
API以JSON对象的形式返回对象数组。我要实现的是将这两个响应合并为一个将由操作返回的响应。如何撰写回复?
请记住,我是Azure的菜鸟,所以我的方法可能太原始了。如果您有更好的东西,我很想听听。
答案 0 :(得分:2)
在set-body下,您可以合并这两个字符串。
答案 1 :(得分:1)
要在return-response
policy内添加Aleksander的答案,有两种方法可以组成最终主体
<set-body>@{
var output = new
{
success = true,
var1 = context.Variables["var1"]
};
return JsonConvert.SerializeObject(output);
}</set-body>
<set-variable name="var1body" value="@((IResponse)context.Variables["var1"]).Body.As<string>())" />
<set-body template="liquid">{
"success": true,
"var1": "{{context.Variables["var1body"]}}"
}</set-body>
您可以在其文档中详细了解set-body
policy。