## What — 回数の上限を超えると 429 が返る
レートリミットは、**一定時間に受け付けるリクエスト数の上限**。
超えた分は処理されず、ステータスコード **429(Too Many Requests)** が返る。
1利用者の連打からサーバーを守る仕組みで、公開APIにはほぼ必ずある。
いま何回残っているかは、**レスポンスヘッダに書いてある**。
| ヘッダ | 意味 |
| --- | --- |
| `X-RateLimit-Limit` | 上限(例:5000回/時) |
| `X-RateLimit-Remaining` | 残り回数 |
| `X-RateLimit-Reset` | 上限が回復する時刻 |
| `Retry-After` | (429のとき)何秒後に再送してよいか |
ヘッダ名はAPIごとに少し違うので、ドキュメントの「Rate limit」の節で確認する。
## How — 429 は「待って再送」が正解
429 は失敗ではなく「**待てばまた通る**」の合図。対応は2段構え。
- `Retry-After` があれば、その秒数だけ待って同じリクエストを再送する
- 無ければ、待ち時間を倍々に伸ばしながら再試行する(**指数バックオフ**:1秒→2秒→4秒…)
残量の確認は `curl -i` でヘッダごと表示すればいい。
```bash
curl -i https://api.github.com/users/octocat
```
## 落とし穴
- **429 をエラーとして処理を止めてしまう**。4xx の中で 429 だけは「リクエストを直す」のではなく「待つ」が正解。リトライ対象として特別扱いする
- **[[ページネーション]] の全件ループが無自覚に上限を食い尽くす**。ループを書くときは `Remaining` を見ながら叩く
## 関連
- [[API]] — API まわりの地図
- [[HTTPレスポンスの構造]] — ヘッダがどこに入っているかはこちら
- [[エラーレスポンス]] — 429 以外のエラーの読み方