すべてのOpen APIはレート制限ポリシーの対象となります。チャネルからのAPIリクエストは、短時間に過剰なリクエストが受信された場合、スロットリングされ、HTTPステータス429 Too Many Requestsを返します。APIによって異なるレート制限の制約が適用される場合があります。
Open APIリクエストのレスポンスHTTPヘッダーには、リクエストの(予想される)結果が記述されます。
ヘッダー名 | 説明 | タイプ | 値 |
|---|---|---|---|
| 単一時間枠内で許可される最大リクエスト数。(詳細はルールを参照) | Number | 1000 |
| 現在の時間枠内で残っているリクエスト数。 | Number | 999 |
| トークンが更新され、より多くのリクエストが許可される時刻(エポック秒単位)。 | Number (Epoch timestamp - in seconds) | 1696118400 |
| レート制限ポリシーが完全に有効な場合、このリクエストがスロットリングされるかを示す。このヘッダーは猶予期間中に利用可能です。このヘッダーを使用して、予想される結果を解釈し、レート制限ポリシーに適応する。 | Boolean | true |
Open API レート制限ポリシーの現状
当社は現在、Open APIへのレート制限導入を進めております。ポリシー適用は下記のフェーズで実施予定です:
モニタリング:レート制限規則を適用し、想定される結果はレスポンス HTTPヘッダーで確認可能です。スロットリング対象となるリクエストは現時点では拒否されません。レート制限規則とポリシーは確定しておらず、変更される可能性があります。
猶予期間:レート制限規則が確定しましたら、皆さまにお知らせいたします。ご利用企業は、制約を満たすようにOpen APIの利用を更新する必要があります。猶予期間中は、レスポンスHTTPヘッダーで期待される結果を確認できますが、(制限対象となる)リクエストはまだ拒否されません。
アクティブ: レート制限ルールが完全に有効化され、制限対象のリクエストはHTTP 429 Too Many Requestsステータスで拒否されます。
現在はActiveフェーズです。猶予期間は2024年5月14日に終了し、レート制限規則は2024年5月15日より完全に有効化されています。
レート制限規則はトークンバケットアルゴリズムに従います。簡潔に説明すると、リクエストは正常に処理されるためにトークンを必要とし、消費します。トークンは最大容量を持つトークンバケットで管理され、固定レートで補充されます。バケット内のトークン数は、任意の時点で実行可能なリクエスト数を表します。
トークンバケットはチャネルごとに個別に管理されるため、複数のAPIキーにリクエストを分散させてもスロットリング対象となるリクエストの削減にはつながりません。また、複数のエンドポイントからAPIリクエストを行っても、同じトークンバケットのトークンが消費される点にご留意ください。
以下の表は、各エンドポイントで適用されるトークンバケットの容量と補充率を示しています。
リソース | トークンバケットの容量 | トークンバケットの補充率 |
|---|---|---|
接客チャット一覧(統合版)( | 100 | 10トークン/秒(10リクエスト/秒) |
その他のすべてのリソース(合計) | 1000 | 10トークン/秒(10リクエスト/秒) |
例えば、ある時点で一度に200件のGET /open/v5/user-chatsリクエストを取得するワークフローを想定します。リソースのトークンバケットの総容量が100であるため、最初の100件のリクエストは受け入れられます。残りの100リクエストは、HTTP 429 Too Many Requests(または猶予期間中はx-ratelimit-will-be-throtted: trueヘッダー)をレスポンスとして受け取ります。
残りのリクエストを成功させるには、複数の時間枠にリクエストを分散させてください。トークンバケットは毎秒10トークンの速度で補充されるため、次の秒の開始時にさらに10リクエストを送信できます。クライアントが次のリクエストを送信するまでの待機時間を判断するには、x-ratelimit-resetレスポンスヘッダーの利用を検討してください。
たとえ次の秒の開始時に残りの100リクエストを一度に送信しても、受け入れられるのはそのうち10リクエストのみです。したがって、スロットリングによる頻繁な再試行を避けるため、Open APIの使用量を事前に予測し、レート制限ルールに従って成功するリクエストのみを送信することがベストプラクティスです。
この例では、GET /open/v5/user-chatsのバケットが枯渇すると、同じトークンバケットを共有するGET /open/v4/user-chatsへのリクエストもスロットリングされます。ただし、他のエンドポイントへのリクエストは別のトークンバケットを使用するため、スロットリングの対象にはなりません。
レート制限ポリシーに関するご質問は、Channel.ioへお問い合わせください。