【问题标题】:Azure APIM: XML Transformation Using Multiple XML Responses to Single XML ResponseAzure APIM:使用多个 XML 响应到单个 XML 响应的 XML 转换
【发布时间】:2021-06-23 07:46:26
【问题描述】:

注意:我使用的是 azure apim

我有两个返回 xml 响应的 api 如下所示: 响应 1:

<A>
  <B>10</B>
</A>

响应 2:

<C>
  <D>10</D>
</C>

我想转换 XML 响应以获得以下输出,其中 Response 2 放在 Response 1 中 输出:

<A>
  <B>10</B>
  <C>
    <D>10</D>
  </C>
</A>

【问题讨论】:

    标签: xml xslt azure-api-management apim


    【解决方案1】:

    设置入站策略来实现它。

    我的想法是使用send-requestset-variablereturn-response进行组合,即先调用2个API,并将请求的具体值保存起来,组合成一个新的Xml文档。这是我的策略,我使用了 2 个 azure 函数来扮演 API 的角色:

       <inbound>
            <base />
            <send-request mode="new" response-variable-name="reqone" timeout="20" ignore-error="true">
                <set-url>https://xxx.azurewebsites.net/api/HttpTrigger1</set-url>
                <set-method>GET</set-method>
            </send-request>
            <send-request mode="new" response-variable-name="reqtwo" timeout="20" ignore-error="true">
                <set-url>https://xxxx.azurewebsites.net/api/HttpTrigger2</set-url>
                <set-method>GET</set-method>
            </send-request>
            <set-variable name="valOne" value="@{
                string text = ((IResponse)context.Variables["reqone"]).Body.As<XDocument>().Root.Value;
                return text;
            }" />
            <set-variable name="valTwo" value="@{
                string text = ((IResponse)context.Variables["reqtwo"]).Body.As<XDocument>().Root.Value;
                return text;
            }" />
            <return-response>
                <set-status code="200" />
                <set-header name="Content-Type" exists-action="override">
                    <value>text/xml</value>
                </set-header>
                <set-body>@{
                    XDocument srcTree = new XDocument(  
                        new XElement("A",  
                            new XElement("B", context.Variables.GetValueOrDefault("valOne","")),  
                            new XElement("C", new XElement("D", context.Variables.GetValueOrDefault("valTwo","")))
                        )  
                    );
                    return srcTree.ToString();
                }</set-body>
            </return-response>
        </inbound>
    

    这是我的 api 响应:

    这是我的测试结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多