レート制限 は、特定の期間にサービスに対して実行できる要求の数を管理するために API プロバイダーによって使用される一般的な手法です。 API プロバイダーは、レート制限を使用して、すべてのユーザーがサービスを確実に利用でき、応答性を維持し、サービスの不正使用や過剰使用を防ぎます。
アプリケーションでクラウド API を使用する場合は、そのレート制限を理解する必要があります。 次の手法は、アプリケーションでレート制限を処理するのに役立ちます。
- レート制限について説明します。 レート制限を理解するために使用する API のドキュメントを確認してください。 レート制限は、使用する API プロバイダーまたはサービス プランによって異なります。 たとえば、一部の API では、無料プランと有料プランのレート制限が異なる場合があります。
- レート制限情報を使用します。 通常、レート制限を使用する API は、応答ヘッダーの現在の制限を伝えます。 たとえば、
RateLimit-Remainingヘッダーは、現在のウィンドウに残っている要求の数を示します。 このヘッダーが 0 に設定された応答を受け取った場合は、レート制限に達し、別の要求を送信する前に次のウィンドウを待つ必要があることがわかります。RateLimit-Resetヘッダーは、レート制限がリセットされた時刻を示します。 ヘッダー名や形式は API ごとに異なります。たとえば、GitHub では、UTC エポック秒単位のx-ratelimit-remainingやx-ratelimit-resetが使用されています。 一部の API は、しきい値に達するまでヘッダーを送信しません。 たとえば、要求の 10% が残っている場合です。 - API の使用を最適化します。 一部のサービスでは、複雑さに基づいて異なる要求に異なるコストが割り当てられます。 たとえば、一部の API では、より多くのデータを返す要求に対して課金される場合があります。 アプリケーションのコストを削減するには、必要なデータのみをフェッチして API の使用を最適化します。 API でサポートされている場合は、バッチ要求を使用します。 応答の処理に必要なリソースの数を減らし、レート制限内に留まるのに役立ちます。
- ローカル レートリミッターを実装します。 特定の期間内に API に対して実行できる要求の数を制限するために、アプリケーション自体にレートリミッターを実装します。 これを行うには、トークン バケットやリークバケット アルゴリズムなどの手法を使用します。これにより、アプリケーションは期間ごとに多くの要求を行うことができます。 追加のリクエストはキューに格納されるか、破棄されます。
- レート制限を超えないようにします。 レート制限を超過すると、API は要求を調整します。通常、HTTP
429 Too Many Requests状態コードが返されます。 スロットリングは、レート制限よりもアプリケーションのスループットに影響します。 レート制限の応答ヘッダーに記載されている情報を活用し、制限範囲内に収め、調整を回避してください。
これらの手法を使用すると、レート制限に対する回復性があり、API の負荷が高い場合でも引き続き機能できるアプリケーションを構築できます。 続いて、実際に動作するかどうかをテストします。開発中はレート制限に引っかかることはめったにありません。
レート制限の処理をテストする方法
| Approach | 見つけたもの | 欠落しているもの |
|---|---|---|
| 運用環境の待機 | 実効レート制限 | すべて、ユーザーがクリックするまで |
| テストで API をモックするか、コーディング エージェントにモックを記述させる | モックしたヘッダーをコードが読み取るかどうか | API の実際のヘッダー名、形式、リセット動作、および SDK の再試行ポリシー アプリでは、モックに到達するためにテスト専用のスイッチも必要です。 |
| 制限に達するまで実際の API を呼び出す | 実際の動作 | オンデマンドで制限に達することはできず、実際のクォータを使い果たし、一部の制限は 1 時間経たないとリセットされません |
| アプリの実際のトラフィックをインターセプトし、制限値をシミュレートする | 実際の URL、選択した上限と時間枠、API 独自のヘッダー | お使いのコードは孤立しています。 それ用に単体テストを取っておいてください。 |
アプリで試す
Dev Proxy は 、選択した API に対するアプリの要求をカウントし、応答にレート制限ヘッダーを追加し、アプリが制限を超えたときに 429 で応答しますが、アプリは実際の URL を呼び出し続けます。 上限と時間枠はユーザーで決めることができるため、1 時間ではなく 1 分で目標を達成することも可能です。
GitHubの場合は、プリセットをダウンロードし、それを使用して開発プロキシを起動します。
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 プリセットを使用します。 Dev Proxy をインストールするには、「Dev Proxy のセットアップ」を参照してください。
次のステップ
Dev Proxy