Azure APIM 策略根据环境设置后端服务 url

问题描述 投票:0回答:1
<policies>
<inbound>
    <choose>
        <when condition="@(context.Request.OriginalUrl.Host.Contains("xyz.prod.abc.com"))">
            <set-backend-service base-url=https://xyz.alpha.abc.com/lead />
        </when>
        <when condition="@(context.Request.OriginalUrl.Host.Contains("xyz.uat.abc.com"))">
            <set-backend-service base-url=https://xyz.uat.alpha.abc.com/lead />
        </when>
        <when condition="@(context.Request.OriginalUrl.Host.Contains("xyz.qa.abc.com"))">
            <set-backend-service base-url=https://xyz.qa.alpha.abc.com/lead />
        </when>
        <otherwise>
            <set-backend-service base-url=https://xyz.dev.alpha.abc.com/lead/>
        </otherwise>
    </choose>
    <base />
</inbound>
<backend>
    <base />
</backend>
<outbound>
    <base />
</outbound>
<on-error>
    <base />
</on-error>

上述策略是否是为新加入的 Azure APIM API 设置后端 URL 的正确且最佳的方法?

或者有更好的方法来做同样的事情吗?

本质上,我希望后端uri能够根据APIM的环境动态设置。如果我在命名值中为每个环境都有一个后端 uri ...我可以动态使用它并且可以改进策略以使其更加简洁吗?

azure azure-api-management policy
1个回答
0
投票

本质上,我希望后端uri能够根据APIM的环境动态设置。如果我在命名值中为每个环境都有一个后端 uri ...我可以动态使用它并且可以改进策略以使其更加简洁吗?

是的,您可以使用存储在命名值中的后端 uri,只需进行少量修改即可使用您的策略。

<policies>
    <inbound>
        <choose>
            <when condition="@(context.Request.OriginalUrl.Host.Contains("xyz.prod.abc.com"))">
                <set-backend-service base-url="{{BackendUrl-For-Prod}}" />
            </when>
            <when condition="@(context.Request.OriginalUrl.Host.Contains("xyz.uat.abc.com"))">
                <set-backend-service base-url="{{BackendUrl-For-URL}}" />
            </when>
            <when condition="@(context.Request.OriginalUrl.Host.Contains("xyz.qa.abc.com"))">
                <set-backend-service base-url="{{BackendUrl-For-QA}}" />
            </when>
            <otherwise>
                <set-backend-service base-url="{{BackendUrl-For-Dev}}" />
            </otherwise>
        </choose>
        <base />
    </inbound>
</policies>

感谢@Thomas的评论。通过使用此策略,您可以引用命名值中的后端 URL,但订阅密钥和产品对于所有环境都将相同。

如果您希望所有环境都使用相同的密钥,那么您可以使用上述策略,或者您可以根据您的环境创建单独的 API。

© www.soinside.com 2019 - 2024. All rights reserved.