按密钥设置使用量配额

quota-by-key 策略允许根据密钥强制实施可续订或有生存期的调用量和/或带宽配额。 密钥的值可以是任意字符串,通常使用策略表达式来提供密钥。 可以添加可选增量条件,指定应在配额范围内的请求。 如果多个策略增加相同的键值,则每个请求的键值仅增加一次。 超过配额时,调用方将收到 403 Forbidden 响应状态代码,响应中包含 Retry-After 标头,其值为建议的重试间隔(秒)。

若要了解速率限制和配额之间的差异,请参阅速率限制和配额

注意

当服务平台基础计算资源重启时,API Management 可能会在达到配额后的短时间内继续处理请求。

提示

为了帮助你配置此策略,门户提供了基于窗体的引导式编辑器。 详细了解如何设置或编辑 API 管理策略

策略语句

<quota-by-key calls="number"
              bandwidth="kilobytes"
              renewal-period="seconds"
              increment-condition="condition"
              counter-key="key value"
              first-period-start="date-time" />

属性

属性 说明 需要 默认
bandwidth renewal-period 所指定的时间间隔内允许的最大总字节数(千字节)。 不允许使用策略表达式。 必须指定 calls 和/或 bandwidth 空值
calls renewal-period 所指定的时间间隔内允许的最大总调用数。 不允许使用策略表达式。 必须指定 calls 和/或 bandwidth 不适用
counter-key 用于 quota policy 的键。 对于每个键值,单个计数器用于配置策略的所有范围。 允许使用策略表达式。 空值
increment-condition 布尔表达式,指定是否应将请求计入配额 (true)。 允许使用策略表达式。 不适用
renewal-period 固定窗口的长度(以秒为单位),此时间过后配额会重置。 每个周期的开始相对于 first-period-start 计算。 最小时间段:300 秒。 当 renewal-period 设置为 0 时,周期将设置为无限。 不允许使用策略表达式。 空值
first-period-start 配额续订期的开始日期和时间,请遵循 ISO 8601 标准规定的格式:yyyy-MM-ddTHH:mm:ssZ。 不允许使用策略表达式。 0001-01-01T00:00:00Z

使用情况

使用注意事项

如果不想在其他 API 之间共享所有 API,则 API 管理实例中的 counter-key 属性值在所有 API 中必须独一无二。

示例

<policies>
    <inbound>
        <base />
        <quota-by-key calls="10000" bandwidth="40000" renewal-period="3600"
                      increment-condition="@(context.Response.StatusCode >= 200 && context.Response.StatusCode < 400)"
                      counter-key="@(context.Request.IpAddress)" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

有关此策略的详细信息和示例,请参阅使用 Azure API 管理进行高级请求限制

后续步骤

有关使用策略的详细信息,请参阅: