fetch
は、Web APIの一部として提供されるブラウザおよびNode.js環境で使用されるAPIで、ネットワークリクエストを行うために使用されます。fetch
の基本的な仕組みを以下に説明します。
基本構造
fetch
は、リソース(通常はHTTPリクエスト)を取得するためのメソッドであり、Promise
を返します。基本的な使用方法は以下の通りです。
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
ステップごとの説明
- リクエストの送信
fetch
メソッドは、指定されたURLにHTTPリクエストを送信します。デフォルトでは、GET
リクエストが送信されます。
- レスポンスの受信
fetch
メソッドは、サーバーからのレスポンスを取得し、Promise
を返します。このPromise
は、レスポンスが受信されると解決されます。
- レスポンスの処理
Promise
のthen
メソッドを使用して、レスポンスオブジェクトを処理します。レスポンスオブジェクトには、HTTPステータスコードやヘッダー情報が含まれています。
- データの変換
- レスポンスのボディを取得するために、
.json()
メソッドや.text()
メソッドなどを使用してデータを変換します。例えば、.json()
メソッドはレスポンスをJSONオブジェクトに変換します。
- レスポンスのボディを取得するために、
- エラーハンドリング
- ネットワークエラーやサーバーエラーを処理するために、
catch
メソッドを使用してエラーハンドリングを行います。
- ネットワークエラーやサーバーエラーを処理するために、
HTTPメソッドの使用
fetch
は、GET
リクエストだけでなく、他のHTTPメソッド(POST
, PUT
, DELETE
など)も使用できます。以下はPOST
リクエストの例です。
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ key: 'value' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
クロスオリジンリクエスト
fetch
はクロスオリジンリクエスト(CORS)をサポートしており、異なるドメインからのリソースを取得できます。CORSポリシーが適切に設定されている必要があります。
キャンセル可能なリクエスト
fetch
は、AbortController
を使用してリクエストをキャンセルすることもできます。
const controller = new AbortController();
const signal = controller.signal;
fetch('https://api.example.com/data', { signal })
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
// リクエストをキャンセルする
controller.abort();
まとめ
fetch
は強力かつ柔軟なAPIであり、ブラウザ環境とNode.js環境の両方で使用できます。シンプルなインターフェースとPromiseベースの設計により、非同期のネットワークリクエストを簡単に処理できます。