如何在响应中将两个变量合并为一个?
How to merge two variables into one in a response?
我有两个 API 添加到 Azure API 管理。基本一样API,只是针对不同的环境。出于监视目的,我想创建一个操作,该操作将在两个 API 中调用相同的方法并将它们的结果合并为一个。我目前正在使用模拟数据处理模拟 APIs。
为了实现这一点,我使用空白操作创建了一个空白 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 操作(我相信这是可以理解的,因为没有设置响应)。当我查看“跟踪”选项卡时,我可以看到两条消息:
GET request to 'https://env1-api.azure-api.net/api/data' has been sent, result stored in 'env1' variable.
GET request to 'https://env2-api.azure-api.net/api/data' has been sent, result stored in 'env2' variable.
据此我得出结论,调用工作正常。这就是我被困的地方。我不知道如何在响应中合并这两个变量。
API 的 return 对象数组,形式为 JSON 对象。我想要实现的是将这两个响应合并为一个将由操作 return 编辑的响应。如何撰写回复?
请记住,我是 Azure 的新手,所以我的方法可能过于原始。如果你有更好的东西,我很想听听。
看看return-响应策略:https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#ReturnResponse
在 set-body 下,您可以合并这两个字符串。
要添加到 Aleksander 的答案中,在 return-response
policy 中,有两种方法可以构成最终的正文
- 使用策略表达式
<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 的更多信息。
我有两个 API 添加到 Azure API 管理。基本一样API,只是针对不同的环境。出于监视目的,我想创建一个操作,该操作将在两个 API 中调用相同的方法并将它们的结果合并为一个。我目前正在使用模拟数据处理模拟 APIs。
为了实现这一点,我使用空白操作创建了一个空白 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 操作(我相信这是可以理解的,因为没有设置响应)。当我查看“跟踪”选项卡时,我可以看到两条消息:
GET request to 'https://env1-api.azure-api.net/api/data' has been sent, result stored in 'env1' variable.
GET request to 'https://env2-api.azure-api.net/api/data' has been sent, result stored in 'env2' variable.
据此我得出结论,调用工作正常。这就是我被困的地方。我不知道如何在响应中合并这两个变量。
API 的 return 对象数组,形式为 JSON 对象。我想要实现的是将这两个响应合并为一个将由操作 return 编辑的响应。如何撰写回复?
请记住,我是 Azure 的新手,所以我的方法可能过于原始。如果你有更好的东西,我很想听听。
看看return-响应策略:https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#ReturnResponse
在 set-body 下,您可以合并这两个字符串。
要添加到 Aleksander 的答案中,在 return-response
policy 中,有两种方法可以构成最终的正文
- 使用策略表达式
<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 的更多信息。