データサイエンティスト検定 リテラシーレベル 無料問題 7 / 10 ・ 分野3: データエンジニアリング
REST API から売上データを繰り返し取得するバッチを作った。連続して呼び出していると、サーバーが 429 のステータスコードを返し始めた。このときの扱いとして適切なものはどれか。
- リクエストの頻度を落とす。Retry-After があれば、その時間が過ぎてから再試行する
- サーバーの内部エラーなので、リクエストの内容を保ったまま、間を置かず続けて何度も再送する
- 指定した URL が間違っているので、取得先の URL を見直し、別のパスを探して再試行する
- 認証の情報が誤っているので、アクセストークンを取り直し、直後に同じリクエストを送り直す
正解と解説を見る
正解: A
正解の理由
HTTP のステータスコード 429 は Too Many Requests で、一定時間内に送ったリクエストが多すぎることを示す。MDN は、サーバーが接続を閉じるか、再試行できる時刻を示す Retry-After ヘッダーを返すと説明する。API を繰り返し呼ぶバッチでは、429 を受けたら頻度を落とし、Retry-After があればその時間を待ってから再試行する。
違う選択肢
「認証の情報が誤っているので、アクセストークンを取り直し、直後に同じリクエストを送り直す」… 認証の誤りは 401 や 403 で示される。429 は短い時間にリクエストを送りすぎたことを示すもので、トークンの取り直しでは解決しない。
「指定した URL が間違っているので、取得先の URL を見直し、別のパスを探して再試行する」… 宛先が存在しないときは 404 が返る。429 は宛先ではなく、リクエストの頻度に対する応答である。
「サーバーの内部エラーなので、リクエストの内容を保ったまま、間を置かず続けて何度も再送する」… 内部エラーは 500 番台で示される。429 は頻度の制限なので、待たずに再送を続けると、制限をさらに厳しく受けるおそれがある。
押さえどころ
429 は「送りすぎ」。401/403 は認証・権限、404 は宛先なし、500 番台はサーバーの障害と、番号の意味で原因を切り分ける。