如何在 Azure API 管理中实施速率限制

通过使用 速率限制,您可以限制用户或服务在特定时间段内可以进行的 API 调用次数。 速率限制有助于确保公平使用,并阻止任何单个用户或服务垄断 API 资源。 Azure API 管理提供了一种为 API 实现速率限制的便捷方法。

为什么使用 Azure API 管理?

Azure API 管理是一项功能强大的多功能云服务,可帮助组织将 API 发布到外部、合作伙伴和内部开发人员。 它提供用于保护、管理和缩放 API 调用的工具。 它的功能之一是控制速率限制,这对于维护 API 的运行状况和可靠性非常有用。

在 Azure API 管理中配置速率限制

Azure API 管理使用策略来强制实施速率限制。 可以在不同的范围内定义这些策略:全局、产品或特定于 API。 这种灵活性使你可以根据 API 的要求和使用模式定制速率限制。

在开始实施速率限制之前,请确定速率限制。 您设置的限制取决于 API 的容量和您预期的流量。 常见限制设置为每秒、每分钟或每小时的调用次数。 例如,您可以允许每个用户每分钟进行 1000 次调用。

若要在 Azure API 管理中定义 API 的速率限制,请使用rate-limitrate-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-limitremaining-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-remainingratelimit-limit 标头。 标头传达 API 在超出限制之前可以处理的调用数。

总结

在 Azure API 管理中实现速率限制有助于创建可靠且可缩放的 API。 通过使用速率限制,可以确保 API 可靠高效地为用户提供服务。 关键是要找到合适的平衡。 如果速率限制过于严格,则可能会妨碍可用性。 如果速率限制过于宽松,则 API 可能会不堪重负。 通过仔细规划和持续监视,可以实现这种平衡并维护正常的 API 环境。

后续步骤