Instiq
第2章 · APIの理解と利用·v1.0.0·更新 2026/7/20·読了目安 約16分

変更要約: 初版

2.2HTTP応答の解釈

この節の要点

API応答を構成するステータスコード2xx成功/3xxリダイレクト/401未認証・403権限不足・404不在・429レート超過/5xxサーバ側)、応答ヘッダContent-TypeRetry-AfterWWW-Authenticate等)、応答ボディ(エラーメッセージを含むJSON)を読み、コード+自分が送ったリクエスト+docsの三つ組で原因を切り分けてトラブルシュートする判断を学びます。

API連携の障害対応は「サーバが悪い/クライアントが悪い」を勘で当てる作業ではありません。HTTP応答はステータスコード・ヘッダ・ボディという三つの情報源を持ち、これらを自分が送ったリクエストとdocsの記載と突き合わせれば、原因の大半は機械的に切り分けられます。この節では、頻出コード(401/403/404/429/5xx)が「誰の・何の問題か」を示す意味を押さえ、次に取るべき一手を応答から導く力を養います。

2.2.1コードのクラスと頻出コード

  • コードは百の位でクラスが分かる:2xx=成功200 OK取得成功/201 Created作成成功/204 No Content成功したが本文なし)、3xx=リダイレクト4xx=クライアント側の誤り(送ったリクエストに問題)、5xx=サーバ側の障害(自分のリクエストは概ね正しくサーバが失敗)。まず4xxか5xxかで「自分を直すか・サーバ/再試行か」の初手が変わる
  • 4xxの識別が実務の要:400=リクエスト不正(JSON構文やパラメータ誤り)、401 Unauthorized=未認証(資格情報が無い/無効・方式違い)、403 Forbidden=認証済みだが権限不足(スコープ/ロール)、404 Not Found=リソース/URL不在(エンドポイントのパス誤り含む)、429 Too Many Requests=レート超過。401と403は「本人確認の失敗」と「権限の失敗」で対処が全く違う。
  • 5xx500 Internal Server Error502 Bad Gateway503 Service Unavailable)は原則サーバ側の問題。リクエストを直しても直らないことが多く、時間を置いて再試行や運用者への連絡が現実的な一手。ただし自分の送ったデータでサーバがクラッシュしている可能性もあるため、直前に変えた値がないかは一応確認する。

2.2.2ヘッダとボディを併読する

  • 応答ヘッダは次の一手のヒントを含む:429に付くRetry-Afterは「何秒後に再試行してよいか」、401に付くWWW-Authenticateは要求される認証方式、Content-Typeは本文の形式、レート系のX-RateLimit-Remainingは残り呼び出し回数。ヘッダを読めば、当て推量せずに待機秒数や不足している認証が分かる
  • 応答ボディ(多くはJSON)には人間可読のエラー詳細が入る。例:{"error":"invalid_token","message":"The access token expired"}。ステータスは401でも、ボディのinvalid_token/expiredまで読めば「トークン期限切れ→リフレッシュ」と一意に分かる。コードで大分類し、ボディで具体原因を確定するのが定石。
試験ポイント

「2xx成功/4xx=自分のリクエスト/5xx=サーバ」「401=未認証・403=認証済みだが権限不足・404=不在・429=レート超過」「429のRetry-Afterで待機、401のWWW-Authenticateで要求方式、ボディのJSONで具体原因を確定」が頻出です。設問は「このコード+この応答ボディ+自分が送ったリクエスト」を突き合わせ、次の一手を選ぶ形で解きましょう。

あなたは在庫APIを叩くバッチが夜間に断続的に失敗すると報告を受けました。ログには3種の応答が混在しています。一つ目は403 Forbidden+ボディ{"error":"insufficient_scope","message":"token lacks inventory:write"}。二つ目は429 Too Many Requests+ヘッダRetry-After: 30。三つ目は404 Not Foundで、リクエストURLはGET /v1/itens/1234。この三つはまったく別の原因で、一律に「リトライを増やす」では解決しません。まず403は認証自体は通っており(=401ではない)、トークンのスコープ不足が明言されています——inventory:write権限を持つトークンを発行し直す(または管理者にロール付与を依頼する)のが正解で、リトライしても永遠に403のままです。次の429レート超過で、Retry-After: 30が「30秒待て」と明示しているので、指数バックオフ(もしくは指示秒数の待機)で再試行すればよく、ここでリトライ間隔を詰めるのは火に油です。三つ目の404は一見サーバ不在に見えますが、URLをdocsと突き合わせると正しいパスは/v1/items/1234——itensは綴り誤りで、これはクライアント側のエンドポイント誤りです。ここで学ぶべきは、同じ「失敗」でも、コードのクラス(4xx/5xx)→具体コード(403/429/404)→ボディ/ヘッダの詳細→自分のリクエスト、と突き合わせれば、それぞれに固有の一手(スコープ再発行・バックオフ・URL修正)が一意に決まることです。応答を丁寧に読まず「全部リトライ」で押すと、403404は永久に直らず、429はかえって悪化します。

コード意味誰の問題か次の一手
`401`未認証(資格情報が無い/無効/方式違い)クライアント(認証)方式確認→トークン再取得/リフレッシュ
`403`認証済みだが権限不足クライアント(権限)スコープ/ロールを持つ資格情報にする
`404`リソース/URL不在クライアント(URL)またはデータdocsとエンドポイント/IDを突き合わせ修正
`429`レート超過クライアント(頻度)`Retry-After`に従いバックオフ
`5xx`サーバ側の障害サーバ時間を置いて再試行/運用連絡
注意

ひっかけ:403は認証エラーなのでトークンを再取得すれば直る」は誤りです——403認証は成功しており(それは401)、不足しているのは権限(スコープ/ロール)なので、同じ権限のトークンを取り直しても直りません。また「404は必ずサーバ側の問題」も誤り=エンドポイントのパスやリソースIDの綴り誤りというクライアント側原因が非常に多く、まずURLをdocsと突き合わせます。

ステータスコードのクラスと401/403/404/429の切り分けの図。
コード+ボディ+リクエストで診断

2.2.3この節のまとめ

  • コードのクラスで初手が決まる:2xx成功/4xx=自分のリクエストを直す/5xx=サーバ側で再試行や運用連絡
  • 4xxの識別が要:401=未認証・403=認証済みだが権限不足・404=不在・429=レート超過。401と403、404のURL誤りを混同しない
  • コード+ヘッダ(Retry-After/WWW-Authenticate)+ボディのJSON+自分のリクエストを突き合わせ、当て推量せず次の一手を確定する

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. API呼び出しが `403 Forbidden` を返し、応答ボディは `{"error":"insufficient_scope","message":"token lacks devices:write"}` だった。認証トークン自体は正しく送れている。次に取るべき最も適切な対応はどれか。

Q2. バッチ処理が `429 Too Many Requests` を返し始めた。応答ヘッダに `Retry-After: 60` が付いている。処理を安定させるための最も適切な対応はどれか。

Q3. あるスクリプトが `GET https://api.example.com/v1/devces/42` で `404 Not Found` を返す。docsを確認するとデバイス取得のパスは `/v1/devices/{id}` である。他のIDでも同様に404になる。この症状の最も妥当な原因と対応はどれか。

理解度を確認第2章「APIの理解と利用」の問題を解く