【问题标题】:Different call limits for different API keys on Azure API ManagerAzure API Manager 上不同 API 密钥的不同调用限制
【发布时间】:2021-05-20 09:18:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 应该有多个产品(代表不同的计划)?每个产品都有自己的&lt;rate-limit&gt;(或&lt;quota&gt;)策略和相应的限制。然后,您授予客户访问这些 APIM 产品的权限。
  • 另外,rate-limit-by-keyquota-by-key 都具有 increment-condition 属性。看来你可以做... increment-condition="@(context.Subscription.Id == "customer sub ID")"。哈克和未经测试! :)
  • calls= 中可能有一个错字(应该是一个数字),但是是的,这是我的想法。正如我提到的,我从未尝试过。让我们知道它是否有效:)
  • 除非您只有少数几个永远不会改变的订阅,否则我相信如果您围绕产品(API 访问层)组织速率限制会更容易扩展。通过这种方式,您可以在单个产品政策中定义限制,并将订阅与产品相关联。
  • 嗨@JustinMathew 你解决了这个问题吗?如果问题解决了,请您在下面的区域发布答案。它可能会帮助其他社区。​​span>

标签: azure-api-management apim


【解决方案1】:

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    相关资源
    最近更新 更多