问题描述
我了解我们可以通过订阅密钥对 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>