使用 速率限制 ,可以限制用户或服务在给定时间范围内可以执行的 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 环境。