首页 > 解决方案 > Azure API Manager 上不同 API 密钥的不同调用限制

问题描述

我了解我们可以通过订阅密钥对 APIM 进行调用限制,如下所示

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

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

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

标签: azure-api-managementapim

解决方案


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>

推荐阅读