Azure API管理器上不同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 APIM中没有针对此问题的内置解决方案。

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

rate-limit-by-key calls

我通过在产品范围上应用速率限制策略成功地解决了这个问题。通过使用

when

https://learn.microsoft.com/en-us/azure/api-management/api-management-advanced-policies选择我的入站策略是这样的

<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>

对于您的用例,更好的选择可能是使用配额而不是速率限制。配额通常用于在较长一段时间内控制电话费率。例如,他们可以设置特定用户在给定月份内可以拨打的电话总数。为了使API货币化,还可以为基于分层的订阅设置不同的配额。例如,基本套餐的订阅者每月通话次数可能不超过1万次,但高级套餐的订阅者每月通话次数可能高达1亿次。

来源:https://learn.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling rate-limits-and-quotas

APIM文档说分级访问是通过为API配置多个APIM产品来实现的。每个APIM产品都具有强制执行所需限制和配额的策略。例如,您可以配置一个基本级别和一个高级级别产品。这可以在APIM中通过执行以下操作进行配置:

  • 从API中删除速率限制策略,因为这不允许不同的层
  • 将现有的速率限制放入基本层产品中,并将其与API关联
  • 添加一个新产品-高级等级
    • 需要订阅
    • 需要批准
  • 复制现有基本层产品上的任何自定义策略。任何自定义代码,比如authenticate
  • 将增加的费率限制/配额添加到高级产品的策略
  • 将高级产品添加到所需的API(多个产品可以分配到一个API)
  • 为每个需要高级访问权限的APIM用户分配高级产品订阅
  • 让用户在他们的API调用中包含订阅密钥头。他们的呼叫将通过高级产品进行,并具有相关的限制和配额

最新更新