導入:なぜResponseオブジェクトを知るべきなのか?
Web開発でAPIからデータを取得する際、私たちは「fetch関数」を日常的に使います。しかし、取得したデータが何者なのか、どうやって安全に取り扱うのかを理解していないと、エラーハンドリングでつまずいたり、予期せぬバグを生んだりしてしまいます。API通信の要となる「Responseオブジェクト」を理解することは、堅牢なフロントエンドを構築するための第一歩です。
基礎知識:Responseオブジェクトとは?
Responseオブジェクトは、fetchAPIがサーバーからのレスポンスを受け取った際に生成する「入れ物」のようなものです。
単に「データ本体」が入っているわけではありません。例えば、通信が成功したかを示す「ステータスコード(200 OKなど)」や、データの形式を示す「ヘッダー情報」、そして実際の「本文(ボディ)」といった情報がひとまとめになっています。
実装:Responseの活用ステップ
API通信を行う際は、以下の3つの手順を意識しましょう。
1. fetchでリクエストを送り、Responseオブジェクトを受け取る。
2. okプロパティで「通信が成功したか」を確認する。
3. json()などのメソッドを使って、扱いやすい形式に変換する。
サンプルプログラム:安全なデータ取得コード
以下のコードは、実際にAPIからデータを取得し、エラーハンドリングを含めた基本的な実装例です。そのままコピーして、ブラウザのコンソールなどで動作を確認してみてください。
async function fetchData() {
try {
// APIへリクエストを送信
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
// 1. レスポンスが正常か確認 (ステータスコードが200-299の範囲か)
if (!response.ok) {
throw new Error('ネットワークエラーまたはサーバーエラーです: ' + response.status);
}
// 2. Responseの中身をJSON形式として解析
const data = await response.json();
// 3. データを表示
console.log('取得成功:', data);
} catch (error) {
// 通信自体が失敗した場合の処理
console.error('エラーが発生しました:', error.message);
}
}
fetchData();
応用・注意点:現場で役立つポイント
・一度しか読めないボディ:
Responseオブジェクトのボディ(json()やtext()など)は、一度読み出すと「消費」され、二度目には空になってしまいます。もしデータを複数回使いたい場合は、変数に格納して再利用しましょう。
・404や500エラーの扱い:
fetch関数は、サーバーが404(見つからない)や500(サーバーエラー)を返しても、Promiseが拒否(reject)されません。必ずresponse.okを使って、自前でエラーチェックを行うことが実務では必須の作法となります。
これらを意識するだけで、API通信の信頼性がぐっと向上します。まずはこのテンプレートをベースに、自分のプロジェクトで試してみてください!