使用プランとレート制限
SP-APIでの使用プランとレート制限の使用方法について説明します。
APIの信頼性は、時間の経過とともに変化するアプリケーションのニーズを満たすだけの容量とリソースのサイズを確保できるかどうかにかかっています。このため、Selling Partner API(SP-API)では、一定期間内にオペレーションに対して実行できるリクエストの数を制御するための使用プランを定義しています。
使用プランはいくつかの要因によって異なります。これらの要因としては、出品パートナーアカウント、出品パートナーアカウントに代わってSP-APIを呼び出すアプリケーション、マーケットプレイスなどがあります。
このドキュメントでは、SP-APIのレート制限アルゴリズム、使用プランを決める要素、使用プランの検索方法、レート制限内での作業に関するよくある質問について説明します。
For guidance on how to optimize your application workloads to leverage the rate limits for each SP-API operation efficiently, refer to Optimize rate limits for application workloads.
用語
SP-API のレート制限に関連する用語を以下に示します。
- レート制限: SP-API が特定の操作に対して行える 1 秒あたりの最大リクエスト数です。スロットリングを回避するには、この制限を超えないようにしてください。
- バーストリミット: 時間をかけて積み上げて同時に送信できる、特定の操作に対するリクエストの最大数。
- Usage plan: The combination of rate limit and burst limit that applies to a specific operation. For more information, refer to Usage plan types and Factors that determine usage plans.
- Token bucket algorithm: The algorithm that the SP-API uses to rate-limit requests, based on an analogy of exchanging tokens for API requests. For a walkthrough of the algorithm, refer to Rate-limiting algorithm.
- スロットリング: レート制限を超えると、SP-API がリクエストを一時的に拒否するケース。制限されたリクエストでは、429 HTTP エラーレスポンスが返されます。スロットルされたリクエストは後で再試行できます。
- アカウント: 開発者アプリケーションに代わって SP-API を呼び出す販売パートナーアカウント。アカウントを指定するには、
sellerId
特定の SP-API オペレーションを呼び出すとき。 - アプリケーション: 販売パートナーに代わって SP-API を呼び出す開発者アプリケーション。販売パートナーの開発者コンソールでは、アプリケーション名の後にアプリケーション ID が表示されます。
- Grantless operations: Operations that don't require a
sellerId
as part of the request. For grantless operations, the selling partner isn't a factor in the usage plan for that operation. For a list of grantless operations, refer to Grantless Operations.
レート制限アルゴリズム
SP-APIは、トークンバケットアルゴリズムを使用してAPIへのリクエストにレート制限を適用します。このアルゴリズムは、トークンを含むバケットの類似性に基づいており、各トークンをAPIへのリクエストに交換することができます。
この類似性では、SP-APIは、バケットの最大サイズに達するまで、設定された1秒あたりのレートを使用して自動的にトークンをバケットに追加します。最大サイズはバーストレートとも呼ばれます。
SP-APIを呼び出すと、SP-APIは、リクエストヘッダーで呼び出し元のIDを識別するアクセストークンに基づいて、そのオペレーションの使用プラン(レート制限とバースト制限)を取得します。SP-APIにリクエストするたびに、バケットからトークンが1つ減算されます。スロットリングは、バケットが空であるために使用できるトークンがないリクエストを行った場合に発生します。スロットルされたリクエストはエラー応答になります。
次の図は、トークンバケットアルゴリズムとバケット割り当て基準に基づいてレート制限がどのように機能するかを示しています。この例では、レート制限が1、バースト制限が2のオペレーションを使用しています。
- バケットは最初はいっぱいで、2つのトークン(バースト制限)が入っています。01:00:100に、アプリケーションがEUマーケットプレイスで事業を行っている出品パートナーに代わってSP-APIのオペレーションを呼び出します。リクエストが成功します。リクエストによりバケットから1つのトークンが使用されたため、バケットには1つのトークンが保持されるようになります。
- 100ミリ秒後、01:00:200に、同じアプリケーションが同じ地域の同じ出品パートナーに代わって同じオペレーションを呼び出します。リクエストは成功し、バケット内の最後のトークンが使用されます。バケットは空になります。
- さらに100ミリ秒後、01:00:300に、同じアプリケーションが同じ地域の同じ出品パートナーに代わって同じオペレーションを呼び出します。今回は、制限を使い切っている(バケットが空になっている)ため、リクエストがスロットルされます。
- レート制限が1秒あたり1トークンであるため、この例の開始から1秒後の01:01:00に、SP-APIはトークンをバケットに入れます。これで、アプリケーションはスロットルされずにオペレーションを正常に呼び出すことができます。
- さらに1秒後、01:02:00に、SP-APIはバケットに別のトークンを追加します。
- 01:03:00には、バケットが最大サイズ(バースト制限)に達しているため、SP-APIはバケットに別のトークンを追加しません。
レート制限とバースト制限を決定する要素により、場合によっては別のトークンバケットが存在することになります。この例では、次の場合に01:00:200に2つのトークンが存在している可能性があります。
- 同じアプリケーションが、別の出品パートナーに代わって同じオペレーションをトリガーします。
- 同じアプリケーションが、同じ出品パートナーに代わって同じオペレーションを呼び出しますが、異なる地域アカウントの認証情報を使用します。
- 別のアプリケーションが同じ出品パートナーに代わって同じオペレーションをトリガーします。
次の図は、このような代替シナリオを示しています。
使用プランを決める要素
各SP-APIオペレーションのレート制限とバースト制限は複数の要素によって決まり、個々のオペレーションに複数の使用プランを適用できます。リクエストは、最初に到達したしきい値によってレート制限が適用されます。
SP-APIは、以下の要素に基づいて使用プランを割り当てます。
- API オペレーション: SP-API の各オペレーションには、独自のデフォルトレート制限とバースト制限があります。これらの制限や、制限の一覧が記載されたドキュメントへのリンクは、各オペレーションの API リファレンスドキュメントに記載されています。
- 販売パートナー (アカウント) とアプリケーションペア: ほとんどのオペレーションのレート制限は、販売パートナーとアプリケーションのペアごとです。アプリケーションは販売パートナーに代わって SP-API を呼び出します。グラントレスオペレーションはこのルールの例外です。アプリケーションは、販売パートナーからの許可なしにグラントレスオペレーションを呼び出すことができます。無償運用では、このセクションの他の基準に基づいて使用プランが定義されます。
- 地域とマーケットプレイス: 使用量プランは、販売パートナーが運営しているマーケットプレイスグループと暗黙的に結びついており、販売パートナーに代わって SP-API を呼び出すアプリケーションを承認しています。このレート制限要因の暗黙的な性質は、マーケットプレイス固有の販売パートナーアカウントが異なることに帰着します。マーケットプレイス固有の販売パートナーアカウントが異なれば、出品者IDも異なります。
使用プランの種類
Each SP-API operation is associated with a usage plan. A usage plan specifies a rate limit and a burst limit. For details about how to find your usage plan, refer to How to find your usage plan. There are two types of usage plans: standard and dynamic.
-
標準使用プラン: ほとんどの SP-API は標準の使用プランによって管理されています。標準使用プランでは、各操作で予想される呼び出しパターンに基づいて、すべての呼び出し元に対してレート制限値が固定されます。各オペレーションの API リファレンスドキュメントには、使用プランまたは使用プランが記載されたドキュメントへのリンクがあります。
-
ダイナミックな利用プラン: 一部の SP-API とオペレーションには動的な使用プランがあります。動的使用量プランとは、そのビジネスにおける現在および過去のビジネスニーズに基づいて、各販売パートナーに合わせて自動的に調整されるプランです。動的使用量プランの目的は、時間の経過とともにこれらの制限を適正に調整することであるため、料金が変わる可能性があります。販売パートナーのさまざまなビジネス指標が料金調整に影響します。これらの指標はビジネス指標のみであり、過去の API リクエスト数は含まれていません。アプリケーションが API リクエストを行う頻度が高くなるため、レートは動的に上昇しません。
動的使用プランは、以下のSP-APIとオペレーションにのみ適用されます。
Selling Partner API Operations 注文v0 すべてのオペレーション 製品価格設定2022-05-01 getFeaturedOfferExpectedPriceBatch
使用プランを確認する方法
以下の方法で使用プラン(レート制限とバースト制限)を確認できます。
-
SP API ドキュメンテーション: これらの制限、または制限を一覧表示するドキュメントへのリンクは、各オペレーションの API リファレンスドキュメントにあります。
-
レスポンスヘッダー: SP-API オペレーションを呼び出すと、
x-amzn-RateLimit-Limit
応答ヘッダー (ある場合) は、アカウントとアプリケーションのペアごとの操作のレート制限を指定します。ただし、次の理由から、このヘッダーの存在を当てにしてはいけません。- 場合によっては、ベストエフォート方式を試みても、SP-API がレート制限を取得できないことがあります。この場合、SP-API は、他の点では有効な操作呼び出しを行っても失敗しません。代わりに、SP-API はレスポンスなしで応答を返します。
x-amzn-RateLimit-Limit
ヘッダー。 - ザ・
x-amzn-RateLimit-Limit
レスポンスヘッダーは HTTP ステータスコード 20x、400、404 用です。許可されていない、または認証されていないリクエストには、このヘッダーを含めないでください。 - ザ・
x-amzn-RateLimit-Limit
ヘッダーには他の使用プランのレート制限は含まれていません。
つまり、レスポンス内の
x-amzn-RateLimit-Limit
ヘッダーの存在に頼ってはならないということです。代わりに、レート制限値の使用を試みる前にヘッダーの有無を確認してください。 - 場合によっては、ベストエフォート方式を試みても、SP-API がレート制限を取得できないことがあります。この場合、SP-API は、他の点では有効な操作呼び出しを行っても失敗しません。代わりに、SP-API はレスポンスなしで応答を返します。
よくあるご質問
私のユースケースには、1オペレーションのレート制限が低すぎます。制限を増やすことはできますか?
We aim for right-sized limits, with the goal that efficient call patterns should, ideally, never be throttled. If your application is consistently throttled, it might mean that you can further optimize your call patterns. For more information, refer to What should I do if my application is consistently throttled. If you find that default rates aren't sufficient, refer to Strategies to optimize rate limits for your application workloads.
アプリケーションで、429レスポンスをどのように処理する必要がありますか?
A 429 is a retry-able status code. You can try again, but repeated throttled requests require a back-off strategy. Use the x-amzn-RateLimit-Limit
response header, when available, to determine if the rate limits differ from your expectations. For details about when this header is available, refer to How to find your usage plan.
使用プランに関してアプリケーションをテストするにはどうしたらよいですか?
You can test 429 error handling by using the Selling Partner API sandbox. However, you can't test rate limits with the sandbox because while operations in production can have various rates, all sandbox operations share the same rate. You can find your assigned usage rates in the x-amzn-RateLimit-Limit
response header for each operation, when available. For details about when this header is available, refer to How to find your usage plan.
アプリケーションで、完全にスロットルを避けることができますか?
いいえ。制御できない要因がいくつもあると、一時的な429がいくつか発生する可能性があります。アプリケーションコードではこの可能性を考慮する必要があります。
アプリケーションが常にスロットルされている場合はどうすればよいですか?
アプリケーションが常に制限されている場合は、コールパターンをさらに最適化する必要があるかもしれません。例えば:
-
電話の頻度を減らし、レート制限内に収めてください。
-
ポーリングメカニズムの代わりにプッシュ通知を利用してください。
-
Use batch APIs where available or try to do more with fewer calls. For example, with the Feeds and Reports APIs, you can send or retrieve more information per call. Generally, examine your call patterns against the operations in an API to determine if you can get the same work done in fewer calls.
認可の取得が多くなると、アプリケーションでスロットルがより頻繁に発生しますか?
いいえ。使用量プランはアプリケーションと販売パートナーのペアごとに異なるため、スループットはクライアントとともに自然に増加します。
レート制限は変更されますか?
レート制限はいつでも上がる可能性があります。APIリファレンスドキュメントに記載されたレート制限が下がる場合は、変更を事前に通知し、変更が反映される前にアプリケーションの更新とテストを行う時間を提供します。
動的使用量プランのレート制限は、ビジネスの状況に応じて自動的に増減します。
アプリケーションが常にスロットルされている場合は、レート制限は増えますか?
Rates are based on a selling partner's business metrics. If your application is consistently throttled, your call patterns are likely not aligned with the rate limits assigned to that selling partner. Refer to What should I do if my application is consistently throttled? and The rate limits for one operation are too low for my use case. Can the limit be increased?.
動的使用プランの全般的な目的は何ですか?
今までの経緯から、同種の使用プランは、特定の状況では大きすぎ、他の状況では小さすぎることが観察されています。動的使用プランの目的は、特定の呼び出しにおけるよく知られたビジネスコンテキストを活用して、どのような状況でも適切な制限を設定することです。
動的使用プランに影響する要因は何ですか?
一般にレート制限は、出品パートナービジネスの種類、規模、および行動に基づいて形成されます。
特定の使用プランに関連付けられている制限はどのくらいの頻度で変更されますか?
当社では、制限への頻繁で破壊的な変更を避けるよう心がけています。通常、出品パートナーアカウントでビジネス指標に意味のある変更が検出されるとすぐに制限は変更されます。
動的制限を遵守するようにアプリケーションをコーディングするにはどうすればよいですか?
次の提案は、アプリケーションが動的レート制限を処理するのに役立ちます。
-
Read the
x-amzn-RateLimit-Limit
header, when available. For details about when this header is available, refer to How to find your usage plan. -
タイマーをハードコーディングしないでください。
-
ループで実行するのではなく、イベントに対して自然にコーディングを行います。イベントを使用する場合、タイマーは不要です。たとえば、特定の秒数ごとではなく、価格通知に応じて価格を更新できます。
2か月前に更新されました