まず結論
APIレスポンスは、status、headers、bodyに分けて読みます。
JavaScriptでAPIを呼ぶと、画面には「成功」か「失敗」しか出ないことがあります。しかしDevTools Networkを見ると、もっと詳しい情報があります。
Status Code: 200
Content-Type: application/json
Response:
{
"name": "Ada"
}
status
statusは、HTTP通信の結果を表す番号です。
| status | 意味 |
|---|---|
| 200 | 成功 |
| 201 | 作成成功 |
| 400 | リクエストが不正 |
| 401 | 認証が必要 |
| 403 | 権限がない |
| 404 | 見つからない |
| 500 | サーバ内部エラー |
まず見るのはstatusです。失敗しているのか、成功しているのに画面側で処理できていないのかを分けます。
headers
headersは、レスポンスに関する追加情報です。
よく見るもの:
Content-TypeCache-ControlSet-CookieAccess-Control-Allow-OriginLocation
JSONを期待しているのに Content-Type がHTMLの場合、APIではなくエラーページが返っていることがあります。
Content-Type: text/html
この状態で response.json() を呼ぶと、JSON解析エラーになることがあります。
body
bodyは、レスポンスの中身です。
JSON APIでは、次のようなデータが返ります。
{
"id": 1,
"title": "学習メモ",
"done": false
}
エラー時にもbodyに理由が入っていることがあります。
{
"message": "email is required"
}
画面のエラー文だけでなく、NetworkのResponseを確認します。
JSONとは
JSONは、データを文字列としてやり取りするための形式です。
{
"name": "Ada",
"skills": ["JavaScript", "SQL"]
}
JavaScriptのオブジェクトに似ていますが、JSONにはルールがあります。
- キーはダブルクォートで囲む
- 文字列もダブルクォート
- コメントは書けない
- 関数は入れられない
fetchで見るポイント
const response = await fetch("/api/posts");
if (!response.ok) {
throw new Error(`HTTP error: ${response.status}`);
}
const data = await response.json();
fetch は、404や500でも通信自体が完了すると例外にならないことがあります。response.ok や response.status を確認します。
切り分け
| 状態 | 考えること |
|---|---|
| statusが200 | データ形式や画面処理を見る |
| statusが400 | 送った値を見る |
| statusが401/403 | 認証・権限を見る |
| statusが404 | URLを見る |
| statusが500 | サーバログを見る |
| JSON解析エラー | Content-TypeやResponseを見る |
ポイント: API調査では、ConsoleだけでなくNetworkのStatus、Headers、Responseをセットで見ます。
まとめ
APIレスポンスは、status、headers、bodyに分けて読みます。JSONが返っているか、エラー理由がbodyにあるか、headersが期待通りかを確認します。
APIが動かない時は、「通信が失敗した」の一言で止めず、何番で、何が返ったのかを見ます。