レート制限 は、一定時間内に受け付けるリクエスト数や処理量を制御する仕組みです。
API、ログイン、検索、メール送信、Webhook受信、外部API連携などで、攻撃、誤実装、過負荷、使いすぎを抑えるために使われます。
まず押さえたいポイント
- 一定時間あたりのリクエスト数を制限する
- HTTP APIでは制限時に 429 Too Many Requests を返すことがある
Retry-Afterで再試行までの待ち時間を伝えることがある- IP、ユーザー、APIキー、エンドポイントなどを単位に数える
- 厳しすぎると正規ユーザーも巻き込む
レート制限は、単にアクセスを拒否するためだけの仕組みではありません。
ログインの総当たり攻撃を遅くする、重い検索でDBを守る、Webhookの再送集中を受け止める、外部APIの上限に合わせてリトライを抑える、といった役割があります。
どんな場面で使うか
ログインでは、同じアカウントや同じIPからの失敗回数を制御し、ブルートフォース攻撃を受けにくくします。
Webhookでは、署名検証に失敗するリクエストを早めに拒否し、重い処理はキューへ逃がす設計と組み合わせます。外部APIを呼ぶ側では、相手サービスの利用上限を超えないように、キュー、キャッシュ、指数バックオフを組み合わせます。
注意点
全APIを同じ回数で制限すると、軽い参照APIと重いCSV出力、無料ユーザーと有料ユーザー、通常APIとログインAPIの違いを扱えません。
また、ログインで厳しすぎるアカウントロックを入れると、攻撃者が他人のアカウントを意図的にロックする嫌がらせに使えることがあります。
そのため、レート制限は 何を守るのか 誰を単位に数えるのか 制限時にどう返すのか ログやメトリクスで見えるか まで含めて設計します。
APIのレート制限をログイン、Webhook、外部APIの観点で見る流れは、APIのレート制限とは?ログイン・Webhook・外部APIで必要になる理由 で詳しく整理しています。