EasyBot

EASYBOT GUIDE

HTTP 429と503の違い|アクセス制限とサーバー障害の見分け方

429 Too Many Requestsと503 Service Unavailableの違い、Retry-Afterの扱い、クライアント側の再試行を比較します。

429と503はどちらも一時的に要求を完了できない時に見ますが、意味が異なります。429はクライアントの要求頻度が上限を超えた状態、503はサービスが現在処理できない状態です。

ステータスの意味

429はユーザー、APIキー、IPなどに設定されたレート制限を示すことが多く、503はメンテナンスや過負荷などサーバー側の一時的な利用不可を表します。

  • レスポンス本文とヘッダーを保存する
  • Retry-Afterがあれば指定時間を守る
  • 発生頻度と対象ユーザーを確認する

クライアントの再試行

両方とも無条件に連打しないことが大切です。指数バックオフ、最大試行回数、ジッターを使い、処理の重複を防ぎます。

  1. 待機時間を段階的に増やす
  2. 再試行可能なHTTPメソッドを見極める
  3. 二重決済や二重登録を防止する

サーバー側の対応

429はレート制限設定と利用状況を、503はリソースと依存サービスを調べます。誤ったステータスを返すと、利用者や検索エンジンが復旧時期を誤解します。

  • 429は適切なスコープで制限する
  • 503は必要に応じてRetry-Afterを付ける
  • サービス状態をステータスページへ案内する

BotやAPIでの注意

Discordや他APIは独自のレート制限ポリシーを持ちます。制限を避けるためにアカウントやIPを回転させず、公式SDKの待機機能とキューを利用します。

  • SDKの公式レート制限処理を使う
  • 要求をキューへ入れて並列数を抑える
  • 規約に沿ってAPIを利用する