現役システムエンジニアの備忘録

技術スキルや用語などの記録を残していきます

Ajax / fetch / API(非同期処理)

【JavaScript入門】APIのエラー処理|HTTPステータス・例外処理・fetch/XHRの違いを初心者向けに解説

投稿日:

この記事で分かること

  • API通信で発生するエラーの種類
  • HTTPステータスコードの判定方法
  • fetch と XHR のエラー処理の違い
  • try/catch を使った例外処理
  • 実務でのエラー処理のベストプラクティス

API 通信では、HTTPエラー・ネットワークエラー・JSONパースエラーなど、さまざまな問題が発生します。
この記事では、fetch と XHR のエラー処理の違いから、ステータスコードの判定方法、try/catch を使った例外処理、そして実務でのベストプラクティスまで、安定した API 実装に欠かせないポイントを分かりやすく解説します。



API通信で発生するエラーの種類

API通信では、主に次の3種類のエラーが発生します。

  • ① HTTPエラー(404 / 500 など)
  • ② ネットワークエラー(通信失敗)
  • ③ JSONパースエラー

これらを正しく処理しないと、
アプリが「固まったように見える」などの問題が起きます。

HTTPステータスコードの基本

ステータス 意味
200 成功
201 作成成功(POST
400 リクエストエラー
401 認証エラー
404 データが存在しない
500 サーバーエラー

API通信では res.ok(200〜299)を基準に判定するのが一般的です。



fetch のエラー処理(重要)

fetch は「HTTPエラーでは例外にならない」という特徴があります。

例:HTTPエラーは catch に入らない


fetch("/not-found")
  .then(res => {
    console.log(res.ok); // false
    console.log(res.status); // 404
  })
  .catch(err => console.error("ネットワークエラー", err));

catch に入るのは「ネットワークエラー」のみです。

fetch の正しいエラー処理(ステータスチェック)


async function loadData() {
  try {
    const res = await fetch("/api");

    if (!res.ok) {
      throw new Error("HTTPエラー: " + res.status);
    }

    const data = await res.json();
    console.log(data);

  } catch (err) {
    console.error("エラー:", err);
  }
}

HTTPエラーは自分で throw する必要があります。

XHR のエラー処理(fetch と違う点)

XHR は fetch と違い、
HTTPエラーでも onload が発火 します。


const xhr = new XMLHttpRequest();

xhr.open("GET", "/api");

xhr.onload = () => {
  if (xhr.status === 200) {
    console.log("成功:", xhr.responseText);
  } else {
    console.error("HTTPエラー:", xhr.status);
  }
};

xhr.onerror = () => {
  console.error("ネットワークエラー");
};

xhr.send();

XHR は onerror が「ネットワークエラー専用」なのも fetch と同じです。

JSONパースエラーの対処

API が不正な JSON を返すと、
res.json() が例外を投げます。


try {
  const data = await res.json();
} catch (err) {
  console.error("JSONパースエラー:", err);
}

実務では API 側の不具合で起きることが多いです。

実務でのエラー処理のベストプラクティス

  • ユーザーに「何が起きたか」を伝える
  • 再試行ボタンを用意する
  • ローディング表示を消す
  • ログをサーバーに送信する
  • APIのレスポンス形式を統一する

特に「ローディングが消えない」問題は UX を大きく損なうため、
エラー時の UI 制御は必須です。



API のエラー処理に関するよくある質問(FAQ)

Q1

fetch の HTTPエラーが catch に入らないのはなぜですか?

A

fetch は HTTPエラーを例外として扱わず、ネットワークエラーのみ catch に入るためです。

Q2

HTTPエラーを検出するにはどうすればいいですか?

A

res.okres.status をチェックし、自分で例外を投げる必要があります。

Q3

JSONパースエラーはどうやって検出しますか?

A

res.json()try/catch で囲むことで検出できます。

Q4

fetch と XHR のエラー処理の違いは何ですか?

A

fetch は HTTPエラーを例外にしない点が最大の違いです。XHR は onerror がネットワークエラー専用です。



まとめ

API のエラー処理は、
HTTPエラー・ネットワークエラー・JSONエラー の3種類を理解することが重要です。

  • fetch → HTTPエラーは例外にならない(自分でチェック)
  • XHR → onerror はネットワークエラー専用
  • try/catch で例外処理を統一できる
  • 実務では UI とログ管理が重要

API通信を扱うアプリでは、
エラー処理が品質を大きく左右します。



関連記事

【JavaScript入門】XMLHttpRequest(XHR)の使い方|GET・POSTリクエストの実装方法を初心者向けに解説

この記事で分かること XMLHttpRequest(XHR)の基本構造 GETリクエストの書き方 POSTリクエストの書き方 readyState・status の扱い方 実務での注意点(非同期処理・ …

【JavaScript入門】APIレスポンスを画面に反映する方法|fetchで取得したデータをDOMに表示する手順を初心者向けに解説

この記事で分かること fetch で取得したデータを画面に表示する方法 JSON を DOM に反映する基本パターン リスト表示・テーブル表示の実装例 ローディング表示・エラー表示の作り方 実務で使う …

【JavaScript入門】Ajaxとは?仕組み・特徴・XMLHttpRequestを初心者向けにわかりやすく解説

この記事で分かること Ajaxとは何か(技術の組み合わせで成り立つ概念) 非同期通信の仕組みとメリット XMLHttpRequestの役割と特徴 Googleマップやサジェストで使われる理由 Ajax …

【JavaScript入門】fetch APIの基本|XHRとの違い・書き方・レスポンス処理を初心者向けに解説

この記事で分かること fetch API の基本構文 XMLHttpRequest(XHR)との違い GET・POST リクエストの書き方 レスポンスの扱い方(text / json) Promise …

このブログは Xserver 上の WordPress で運用しています。
表示速度が速く、安定しているのでブログ初心者にもおすすめです。

レンタルサーバー エックスサーバー

-Ajax / fetch / API(非同期処理)

執筆者: