レート制限は、クラウド API が特定の時間内にユーザーが行うことができる要求の数を調整するために使用する制御メカニズムです。 クラウド API プロデューサーは、レート制限を使用して、要求のフローがサービスを圧倒しないようにします。 レート制限により、API 呼び出しの速度と量に上限が設定されます。 レート制限は、通常、期間ごとの要求の観点から定義されます。
クラウド API がレート制限を使用する理由
- オーバーロードを防止します。 レート制限により、単一のユーザーまたはサービスで要求が多くなりすぎないようにすることで、API サーバーの安定性と応答性が確保されます。
- 公平な使用を確保します。 レート制限では、1 人のユーザーが API リソースを独占することを保証することで、公平な使用ポリシーが適用されます。 レート制限により、すべてのユーザーに対して公平なアクセスが可能になります。
- セキュリティを強化します。 レート制限は、悪意のある可能性のあるソースからの要求の数を制限することで、分散型サービス拒否攻撃やその他の不正な動作を軽減するのに役立ちます。
- コストを管理します。 クラウド サービス プロバイダーの場合、レート制限は、予期しないリソースや過剰なリソースの使用を防ぐことで運用コストを管理するのに役立ちます。
- サービスの品質を維持します。 レート制限により、トラフィックの急増を防ぐことで、すべてのユーザーに一貫したサービス品質が保証されます。
アプリでレート制限が発生する方法
クラウド API を統合するアプリを構築するときは、そのドキュメントを確認して、レート制限がサポートされているかどうかを確認します。 その場合は、レート制限に関する情報を含む RateLimit-... または X-RateLimit-... 応答ヘッダーを受け取ります。 アプリケーションでこの情報を使用して、API のレート制限を超えないようにすることができます。 たとえば、 RateLimit-Remaining ヘッダーは、現在のウィンドウに残っている要求の数を示します。 このヘッダーが 0 に設定された応答を受け取った場合は、レート制限に達し、別の要求を送信する前に次のウィンドウを待つ必要があることがわかります。
RateLimit-Reset ヘッダーは、レート制限がリセットされた時刻を示します。 一部の API は、しきい値に達した後にのみ RateLimit-... ヘッダーを送信します。 たとえば、要求の 10% が残っている場合です。
レート制限を超えると、API によって要求が調整され、HTTP 429 Too Many Requests 状態コードが返されます。 一部の API では、別の要求を送信する前に待機する必要がある時間を示す Retry-After ヘッダーが送信される場合もあります。 すべての API がこのパターンに従うわけではありません。 たとえば、GitHubは、403ではなく429で回答できます。
調整を回避し、アプリケーションの応答性を維持するには、アプリケーションにレート制限を実装します。 テクノロジ スタックに応じて、さまざまなライブラリがアプリケーションのレート制限を処理するのに役立ちます。 アプリケーションでレート制限を実装した後、レート制限が適切に処理されるかどうかをテストします。
レート制限はアプリにどのように影響しますか?
API が 429 応答を返し始めると、それらを処理しないアプリがクラッシュしたり、一般的なエラーが表示されたり、再試行が非常に高速に行われてスロットルされた状態が続いたり、データがサイレントで削除されたりします。 API が高速で、自分が唯一のユーザーであり、テスト データが小さいため、開発中にこうしたことを目にすることはほとんどありません。
アプリがレート制限を処理することをテストする方法
| Approach | 見つけたもの | 欠落しているもの |
|---|---|---|
| 運用環境の待機 | 実効レート制限 | すべて、ユーザーがクリックするまで |
| テストで API をモックするか、コーディング エージェントにモックを記述させる | 再試行ブランチを実行するかどうか | API の実際の状態コード、レート制限ヘッダー、エラー本文、および SDK の再試行ポリシー。 アプリでは、モックに到達するためにテスト専用のスイッチも必要です。 |
| レート制限されるまで実際の API を呼び出す | 実際の動作 | オンデマンドで制限に達することはできず、実際のクォータを使い果たし、一部の制限は 1 時間経たないとリセットされません |
| アプリの実際のトラフィックをインターセプトし、制限値をシミュレートする | 実際の URL、実際の SDK と再試行ポリシー、API 独自のヘッダーと、選択した制限 | お使いのコードは孤立しています。 それ用に単体テストを取っておいてください。 |
アプリで試す
Dev Proxy は、アプリが実際の URL を呼び出し続ける間、選択した API に対するアプリの要求をカウントし、応答にレート制限ヘッダーを追加し、アプリが制限を超えたときに 429 を返します。 また、制限がリセットされる前にアプリが API を再度呼び出すタイミングも通知されます。
アプリが呼び出す API のプリセットをダウンロードし、それを使用して Dev Proxy を開始します。
devproxy config get github-rate-limiting
devproxy --config-file "~dataFolder/configs/github-rate-limiting/.devproxy/devproxyrc.json"
OneDriveとSharePoint (/drive、/shares、/sites) のMicrosoft Graph呼び出しには、microsoft-graph-rate-limiting プリセットを使用します。 任意の API に対して独自の上限を設定するには、「レート制限 API 応答をシミュレートする」を参照してください。 開発プロキシをインストールするには、「 開発プロキシの設定」を参照してください。
次のステップ
Dev Proxy