按密钥设置使用量配额
可用性
重要
此功能在 API 管理的“高级”、“标准”、“基本”和“开发人员”层中可用 。
quota-by-key
策略允许根据密钥强制实施可续订或有生存期的调用量和/或带宽配额。 密钥的值可以是任意字符串,通常使用策略表达式来提供密钥。 可以添加可选增量条件,指定应在配额范围内的请求。 如果多个策略增加相同的键值,则每个请求的键值仅增加一次。 超过配额时,调用方将收到 403 Forbidden
响应状态代码,响应中包含 Retry-After
标头,其值为建议的重试间隔(秒)。
若要了解速率限制和配额之间的差异,请参阅速率限制和配额。
注意
当服务平台基础计算资源重启时,API Management 可能会在达到配额后的短时间内继续处理请求。
提示
为了帮助你配置此策略,门户提供了基于窗体的引导式编辑器。 详细了解如何设置或编辑 API 管理策略。
策略语句
<quota-by-key calls="number"
bandwidth="kilobytes"
renewal-period="seconds"
increment-condition="condition"
increment-count="number"
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 )。 允许使用策略表达式。 |
否 | 空值 |
increment-count | 每个请求增加计数器的数目。 允许使用策略表达式。 | 否 | 1 |
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 管理进行高级请求限制。
相关策略
后续步骤
有关使用策略的详细信息,请参阅:
- 教程:转换和保护 API
- 策略参考,其中提供了策略语句及其设置的完整列表
- 策略表达式
- 设置或编辑策略
- 策略示例