

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 調節對 REST API 的請求，以提高 API Gateway 的輸送量
<a name="api-gateway-request-throttling"></a>

您可以為您的 API 設定調節和配額，以便防止 API 接收過多請求。調節和配額都依最佳作法來套用，它們都應該視為目標，而非確定的請求上限。

API Gateway 會使用字符儲存貯體演算法將字符計算為請求，進而調節傳送給 API 的請求量。具體而言，API Gateway 會按區域檢查帳戶中所有 API 的速率和爆量請求次數。在字符儲存貯體演算法中，爆量可以實現預先定義的超限，但在某些情況下，其他因素也可能導致超限。

提交的請求量超出穩定狀態請求率和爆量限制時，API Gateway 會開始調節請求量。此時用戶端可能會收到 `429 Too Many Requests` 的錯誤回應。發現這類例外狀況時，用戶端可以採用限制速率的方式來重新提交失敗的請求。

身為 API 開發人員，您可以設定個別 API 階段或方法的目標限制，來改善您帳戶中所有 API 的整體效能。或者，您可以啟用用量計劃，根據指定的請求速率和配額來對用戶端提交的請求量設定調節。

**Topics**
+ [如何在 API Gateway 中套用調節限制設定](#apigateway-how-throttling-limits-are-applied)
+ [每個區域的帳戶層級調節](#apig-request-throttling-account-level-limits)
+ [在用量計劃中設定 API 層級和階段層級調節目標](#apigateway-api-level-throttling-in-usage-plan)
+ [設定階段層級限流目標](#apigateway-stage-level-throttling)
+ [在用量計劃中設定方法層級調節目標](#apigateway-method-level-throttling-in-usage-plan)

## 如何在 API Gateway 中套用調節限制設定
<a name="apigateway-how-throttling-limits-are-applied"></a>

設定 API 的限流與配額設定之前，先了解 API 的限流相關設定類型，以及 API Gateway 如何套用這些設定，會很有用。

Amazon API Gateway 提供四種基本類型的調節相關設定：
+ *AWS 限流限制*會套用至區域中的所有帳戶和用戶端。這些限制設定的存在是為防止 API 和帳戶接收的請求過多。這些限制由 設定， AWS 客戶無法變更。
+ 帳戶型限制會套用至指定區域內某帳戶的所有 API。帳戶層級速率限制可按請求提高。使用較短逾時值和較小酬載的 API 可擁有更高的上限。如需請求提高區域內帳戶層級的調節限制，請與 [AWS 支援中心](https://console.aws.amazon.com/support/home#/)聯絡。如需詳細資訊，請參閱[Amazon API Gateway 配額](limits.md)。請注意，這些限制不能高於限 AWS 流限制。
+ API 型限制、階段型調節限制則會套用到某特定階段的 API 方法層級。您可以為所有方法做相同設定，或為每個方法做不同的調節設定。請注意，這些限制不能高於限 AWS 流限制。
+ *用戶端型調節限制*會套用至用戶端，這類用戶端採用與用量計劃關聯的 API 金鑰做為用戶端識別符。請注意，這些限制不能高於帳戶型限制。

API Gateway 會以如下順序套用您的限流相關設定：

1. 您在[用量計劃](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create)中為 API 階段設定的[用戶端型或方法型調節限制](#apigateway-method-level-throttling-in-usage-plan)

1. [您為 API 階段設定的方法型限流](set-up-stages.md#how-to-stage-settings)

1. [每個區域的帳戶層級調節](#apig-request-throttling-account-level-limits)

1. AWS 區域調節

## 每個區域的帳戶層級調節
<a name="apig-request-throttling-account-level-limits"></a>

預設情況下，API Gateway 會按區域限制 AWS 帳戶內所有 API 的每秒穩定狀態請求量 (RPS)。它還會按區域限制 AWS 帳戶內所有 API 的爆量 (即儲存貯體大小上限)。在 API Gateway 中，爆量限制代表 API Gateway 傳回 `429 Too Many Requests` 錯誤回應前可實現的並行請求提交數上限。如需有關調節配額的詳細資訊，請參閱 [Amazon API Gateway 配額](limits.md)。

## 在用量計劃中設定 API 層級和階段層級調節目標
<a name="apigateway-api-level-throttling-in-usage-plan"></a>

在[用量計劃](api-gateway-api-usage-plans.md)中，您可以在 API 或階段層級為所有方法設定方法型限流。您可以指定*限流速率*，也就是將權杖新增至權杖儲存貯體的速率 (以每秒請求數計算)。您也可以指定*限流暴量*，也就是權杖儲存貯體的容量。

您可以使用 AWS CLI、 SDKs 和 AWS 管理主控台 來建立用量計劃。如需有關如何建立用量計畫的詳細資訊，請參閱[API Gateway 中 REST API 的用量計畫和 API 金鑰](api-gateway-api-usage-plans.md)。

## 設定階段層級限流目標
<a name="apigateway-stage-level-throttling"></a>

您可以使用 AWS CLI、 SDKs 和 AWS 管理主控台 來建立階段層級限流目標。

如需如何使用 AWS 管理主控台 建立階段層級限流目標的詳細資訊，請參閱 [修改階段設定。](set-up-stages.md#how-to-stage-settings)。如需如何使用 AWS CLI 建立階段層級限流目標的詳細資訊，請參閱 [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html)。

## 在用量計劃中設定方法層級調節目標
<a name="apigateway-method-level-throttling-in-usage-plan"></a>

您可以在 **Usage Plans** (用量計劃) 中在方法層級設定其他調節目標，如 [建立用量計劃](api-gateway-create-usage-plans.md#api-gateway-usage-plan-create) 中的程序所示。若要在 API Gateway 主控台中設定這些限制，請在**設定方法調節** 設定中指定 `Resource=<resource>`、`Method=<method>`。例如，對於 [PetStore 範例](api-gateway-create-api-step-by-step.md)，您可能會指定 `Resource=/pets`，`Method=GET`。