EASYBOT GUIDE
HTTP 429と503の違い|アクセス制限とサーバー障害の見分け方
429 Too Many Requestsと503 Service Unavailableの違い、Retry-Afterの扱い、クライアント側の再試行を比較します。
429と503はどちらも一時的に要求を完了できない時に見ますが、意味が異なります。429はクライアントの要求頻度が上限を超えた状態、503はサービスが現在処理できない状態です。
ステータスの意味
429はユーザー、APIキー、IPなどに設定されたレート制限を示すことが多く、503はメンテナンスや過負荷などサーバー側の一時的な利用不可を表します。
- レスポンス本文とヘッダーを保存する
- Retry-Afterがあれば指定時間を守る
- 発生頻度と対象ユーザーを確認する
クライアントの再試行
両方とも無条件に連打しないことが大切です。指数バックオフ、最大試行回数、ジッターを使い、処理の重複を防ぎます。
- 待機時間を段階的に増やす
- 再試行可能なHTTPメソッドを見極める
- 二重決済や二重登録を防止する
サーバー側の対応
429はレート制限設定と利用状況を、503はリソースと依存サービスを調べます。誤ったステータスを返すと、利用者や検索エンジンが復旧時期を誤解します。
- 429は適切なスコープで制限する
- 503は必要に応じてRetry-Afterを付ける
- サービス状態をステータスページへ案内する
BotやAPIでの注意
Discordや他APIは独自のレート制限ポリシーを持ちます。制限を避けるためにアカウントやIPを回転させず、公式SDKの待機機能とキューを利用します。
- SDKの公式レート制限処理を使う
- 要求をキューへ入れて並列数を抑える
- 規約に沿ってAPIを利用する