API レート制限とは、一定期間内に API へ送信できるリクエスト数の上限を設ける仕組みです。サービスの安定性を確保し、特定のユーザーやボットによるリソースの独占を防ぐために不可欠な防御機構です。
レート制限の実装方式には主に 3 つあります。固定ウィンドウ方式 (1 分間に 100 リクエストなど固定枠) 、スライディングウィンドウ方式 (直近 1 分間のリクエスト数で判定) 、トークンバケット方式 (一定速度でトークンが補充され、リクエストごとにトークンを消費) です。トークンバケット方式はバースト的なアクセスにも柔軟に対応でき、 AWS API Gateway や Stripe など多くのサービスで採用されています。
レート制限に達した場合、サーバーは HTTP 429 (Too Many Requests) ステータスコードを返します。レスポンスヘッダーの Retry-After フィールドに再試行までの待機秒数が含まれるため、クライアント側ではこの値を読み取って指数バックオフ (1 秒、 2 秒、 4 秒と待機時間を倍増させる方式) で再試行するのがベストプラクティスです。
短縮 URL サービスの API では、 URL 短縮リクエスト (書き込み) とリダイレクト (読み取り) で異なるレート制限を設けるのが一般的です。 Bitly の無料プランでは月間 1,000 リンク作成が上限であり、大量の URL を一括短縮する場合は API レート制限を意識した設計が必要です。関連書籍は Amazon でも探せます。