藉由使用 速率限制,您可以限制使用者或服務在特定時段內可以進行的 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-limit 或 rate-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-limit、remaining-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-remaining 和 ratelimit-limit 標頭。 標頭會先傳達 API 在超過限制之前可以處理的呼叫數目。
摘要
在 Azure API 管理 中實作速率限制可協助您建立健全且可調整的 API。 藉由使用速率限制,您可以確保 API 能夠可靠地且有效率地為使用者提供服務。 關鍵是尋找正確的平衡點。 如果速率限制太嚴格,您可能會妨礙可用性。 如果速率限制太寬鬆,您就會冒著壓倒 API 的風險。 透過仔細規劃和持續監視,您可以達到此平衡並維護狀況良好的 API 環境。