如何在 Azure API 管理中实施速率限制
使用 速率限制 ,可以限制用户或服务在给定时间范围内可以执行的 API 调用数。 速率限制有助于确保公平使用,并阻止任何单个用户或服务垄断 API 资源。 Azure API 管理(APIM)提供了一种实现 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
策略。 前者设置所有用户的限制,而后者允许每个已标识密钥的限制(例如订阅或用户 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 请求过多状态代码,以及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
和total-calls-header-name
属性扩展策略remaining-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 环境。