Azure API 管理器上不同 API 密钥的不同调用限制

Different call limits for different API keys on Azure API Manager

我知道我们可以通过订阅密钥对 APIM 的通话限制如下

  <rate-limit-by-key calls="3" renewal-period="15" counter-key="@(context.Subscription.Id)" />

我有一个用例,我需要为不同的客户从现有的 API 中获利。根据他们选择的计划,他们将能够以不同的限制访问此 API。假设高级客户每分钟可以拨打我的 api 一次,而我的基本计划的客户可以每 10 分钟拨打一次 api。

我正在寻找一种方法来对不同的 API 密钥设置不同的速率限制。基本上是 API 键的映射和我需要配置的相应速率限制。因此,相同的 API 可以被不同的不同客户端访问,并且每个客户端都有自己的速率限制。

Azure APIM 中没有针对此问题的内置解决方案。

由于某些内部限制,调用将不支持表达式。

rate-limit-by-key calls

我已经设法通过对产品范围应用速率限制策略来解决它。通过使用

when

https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#choose

所以我的入境政策是这样的

        <choose>
            <when condition="@(context.Subscription.Name=="abcd")">
                <rate-limit-by-key calls="1" renewal-period="15" counter-key="@(context.Subscription.Id)" />
            </when>
            <when condition="@(context.Subscription.Name=="efgh")">
                <rate-limit-by-key calls="2" renewal-period="15" counter-key="@(context.Subscription.Id)" />
            </when>
            <otherwise />
        </choose>