共用方式為


如何在 Azure API 管理 中實作速率限制

藉由使用 速率限制,您可以限制使用者或服務在特定時段內可以進行的 API 呼叫數目。 速率限制可協助您確保公平使用,並防止任何單一使用者或服務壟斷 API 資源。 Azure API 管理提供方便的方式,可實作 API 的速率限制。

為何要使用 Azure API 管理?

Azure API 管理 是功能強大的多功能雲端服務,可協助組織將 API 發佈至外部、合作夥伴和內部開發人員。 它提供用來保護、管理及調整 API 呼叫的工具。 其其中一項功能是控制速率限制,這對於維護 API 的健康情況和可靠性很有用。

在 Azure API 管理 中設定速率限制

Azure API 管理 會使用原則來強制執行速率限制。 您可以在不同的範圍定義這些原則:全域、產品或 API 特定。 此彈性可讓您根據 API 的需求和使用模式來量身打造速率限制。

開始實作速率限制之前,請先決定速率限制。 您設定的限制取決於您的 API 容量和預期的流量。 一般限制會設定為每秒呼叫數、分鐘或小時數。 例如,每個使用者可能會允許每分鐘 1,000 次呼叫。

若要在 Azure API 管理 中定義 API 的速率限制,請使用 rate-limitrate-limit-by-key 原則。 rate-limit 原則為所有使用者設定限制。 此原則 rate-limit-by-key 允許每個識別金鑰的限制(例如訂用帳戶或使用者識別碼)。

以下是將呼叫限制為每分鐘 1,000 個原則的範例。

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

後續步驟