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

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

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

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

【JavaScript入門】fetchでPOSTする方法|JSON送信・ヘッダー設定・レスポンス処理を初心者向けに解説

この記事で分かること fetch API で POST リクエストを送る方法 JSON を送信するためのヘッダー設定 レスポンスの受け取り方(json) エラー処理(HTTPエラー・ネットワークエラー …

【JavaScript入門】外部APIを使った実例|天気API・GitHub APIで学ぶ実践的なデータ取得方法

この記事で分かること 外部APIとは何か 天気APIを使ったデータ取得の実例 GitHub APIを使ったユーザー情報取得 fetch と async / await の実践的な使い方 APIデータを …

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

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

【JavaScript入門】JSONの扱い方|JSON.parse・JSON.stringifyの基本と実務での使い方を初心者向けに解説

この記事で分かること JSONとは何か(データ形式の基本) JSON.parse の使い方(文字列 → オブジェクト) JSON.stringify の使い方(オブジェクト → 文字列) API通信で …

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

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

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

執筆者: