レート制限【rate limit】レートリミット

特定の利用者が短時間に大量のリクエストを送り続けると、サーバに過大な負荷がかかり、他の利用者がサービスを利用できなくなる恐れがある。レート制限はこうした事態を防ぐ関所として機能する。「1分間に100回まで」のように上限を定め、超過したリクエストは拒否するか遅延させる。HTTPベースのAPIでは、上限超過時に「429 Too Many Requests」というエラーコードを返すのが一般的である。
制限を実現するアルゴリズムにはいくつかの種類がある。「固定ウィンドウ」方式は一定の時間枠ごとにカウントをリセットする単純な手法だが、時間枠の切り替わり直前にアクセスが集中しやすい弱点がある。「トークンバケット」方式や「リーキーバケット」方式は、一定の速度で利用権が補充・消費される仕組みで、突発的なアクセスをある程度許容しながら平均的な流量を抑えられる。
レート制限はサーバ資源の保全にとどまらず、セキュリティ対策としても機能する。自動プログラムによる大量のパスワード試行や、無断でデータを大量収集するスクレイピングを抑止できる。有料APIでは、契約プランに応じた利用量の管理手段としても活用される。制限が厳しすぎると正当な利用者の操作を妨げることになるため、適切な上限値の設定や契約条件での事前説明が求められる。
利用者が制限に遭遇した場合は、原則として一定時間待機してから再試行する必要がある。その場合、サービス側が制限解除までの残り時間を通知することが多い。サービスによっては、上位プランへの加入によって制限を緩和したり、一定の利用権(トークンなど)を追加購入できる場合もある。APIを組み込んだシステムを開発する際は、制限値を事前に把握したうえで、リクエストの頻度を自動的に調整するロジックを組み込むことが求められる。