通过使用 速率限制,您可以限制用户或服务在特定时间段内可以进行的 API 调用次数。 速率限制有助于确保公平使用,并阻止任何单个用户或服务垄断 API 资源。 Azure API 管理提供了一种为 API 实现速率限制的便捷方法。
为什么使用 Azure API 管理?
Azure API 管理是一项功能强大的多功能云服务,可帮助组织将 API 发布到外部、合作伙伴和内部开发人员。 它提供用于保护、管理和缩放 API 调用的工具。 它的功能之一是控制速率限制,这对于维护 API 的运行状况和可靠性非常有用。
在 Azure API 管理中配置速率限制
Azure API 管理使用策略来强制实施速率限制。 可以在不同的范围内定义这些策略:全局、产品或特定于 API。 这种灵活性使你可以根据 API 的要求和使用模式定制速率限制。
在开始实施速率限制之前,请确定速率限制。 您设置的限制取决于 API 的容量和您预期的流量。 常见限制设置为每秒、每分钟或每小时的调用次数。 例如,您可以允许每个用户每分钟进行 1000 次调用。
若要在 Azure API 管理中定义 API 的速率限制,请使用rate-limit
或rate-limit-by-key
策略。 该 rate-limit
策略为所有用户设置限制。 该 rate-limit-by-key
策略允许对每个已识别的密钥(如订阅或用户 ID)进行限制。
下面是一个策略示例,该策略将调用限制为每分钟 1000 次。
<policies>
<inbound>
<base />
<rate-limit calls="1000" renewal-period="60" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
当您超过指定的调用次数时,Azure API 管理会发送一个 429 Too Many Requests
状态代码,以及 retry-after
响应标头和一条消息,指示您何时可以重试。
HTTP/1.1 429 Too Many Requests
content-type: application/json
retry-after: 60
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 60 seconds."
}
公开响应标头的速率限制信息
默认情况下,Azure API 管理不会公开有关响应标头的速率限制信息。 不通信速率限制使得应用难以避免超过限制并受到限制。 若要公开速率限制信息,请使用rate-limit
和remaining-calls-header-name
属性扩展策略total-calls-header-name
。
<policies>
<inbound>
<base />
<rate-limit calls="1000" renewal-period="60" remaining-calls-header-name="ratelimit-remaining" total-calls-header-name="ratelimit-limit" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
当您现在调用 API 时,每个响应都包含 ratelimit-remaining
和 ratelimit-limit
标头。 标头传达 API 在超出限制之前可以处理的调用数。
总结
在 Azure API 管理中实现速率限制有助于创建可靠且可缩放的 API。 通过使用速率限制,可以确保 API 可靠高效地为用户提供服务。 关键是要找到合适的平衡。 如果速率限制过于严格,则可能会妨碍可用性。 如果速率限制过于宽松,则 API 可能会不堪重负。 通过仔细规划和持续监视,可以实现这种平衡并维护正常的 API 环境。