共用方式為


如何在 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-limitrate-limit-by-key 原則。 前者會設定所有使用者的限制,而後者則允許每個識別密鑰的限制(例如訂用帳戶或使用者標識符)。

以下是將呼叫限制為每分鐘 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 管理 不會公開回應標頭的速率限制資訊。 未通訊速率限制會使應用程式難以避免超過限制並受到節流。 若要公開速率限制資訊,請使用 和 total-calls-header-name 屬性來擴充remaining-calls-header-namerate-limit原則。

<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 環境。

下一步