【问题标题】:Azure API Management only output properties defined in the OpenAPI specAzure API 管理仅输出 OpenAPI 规范中定义的属性
【发布时间】:2021-06-09 12:34:00
【问题描述】:

是否可以仅在 APIM 上的响应中输出属性,这些属性在 APIM 中上传的 openapi 规范中定义,而不是来自后端服务器的完整响应?

我们的后端 API 有一个包含 3 个属性的响应对象:FirstName、LastName 和 BirthDay。在 Azure API 管理中,我们添加了带有仅包含 FirstName 和 LastName 的架构定义的 openapi 规范,因此 BirthDay 不会被暴露或泄露。但是,当通过 APIM 调用 API 时,BirthDay 属性在响应中可用。

有一个 validate-content 策略,但我们不想阻止整个响应,我们只想阻止 APIM 上的 openapi 架构定义中未定义的属性。

【问题讨论】:

    标签: azure-api-management


    【解决方案1】:

    我认为您可以参考this sample 删除响应中的 BirthDay 属性。

    <outbound>
        <base />
        <choose>
          <when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
            <set-body>
              @{
                var response = context.Response.Body.As<JObject>();
                response.Property ("BirthDay").Remove ();
                return response.ToString();
              }
        </set-body>
          </when>
        </choose>    
      </outbound>
    

    【讨论】:

    • 这应该意味着我们需要为每个操作创建一个策略并手动映射来自 openapi 定义的属性。难道没有一种将属性映射到 openapi 规范的自动化方法吗?
    • 对于 apim,这似乎是管理响应的唯一方法。如果你想要一个简单的配置,也许你需要修改 api 本身...
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2019-04-04
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多