【フェッチエーピーアイ】

Fetch API とは?

最終更新:
💡 リクエストを送り、応答を確認して読む

JavaScriptからHTTPリクエストを送り、レスポンスを扱うAPI。fetch()はPromiseを返し、受け取ったResponseからステータスやヘッダー、本文を読み取れる。

📌 このページのポイント
Fetch API:送る → 確かめる → 読むブラウザサーバーリクエストレスポンス① 受け取るResponse応答の情報② 確認するok / status成功した?③ 本文を読むjson()など内容を取得! 404や500でも応答は届くPromiseの成功と、HTTPの成功は別
HTTPエラーの応答も受け取るため、ステータスを確認して扱います。
ひよこ ひよこ
Fetch APIって、何に使うの?
ペンギン先生 ペンギン先生
WebページのJavaScriptから、サーバーへデータを取りに行ったり、データを送ったりするときに使うよ。fetch()が返すPromiseをawaitで待つと、応答を表すResponseを受け取れるんだ。
ひよこ ひよこ
JSONは、そのまま返ってくるの?
ペンギン先生 ペンギン先生
最初に受け取るのは、ステータスやヘッダー、本文を扱うResponseだよ。成功か確認してからawait response.json()などで本文を読む。JSONでない本文をjson()で読めば、解析で失敗することもあるんだ。
ひよこ ひよこ
404なら、catchで分かるよね?
ペンギン先生 ペンギン先生
HTTPの404や500の応答だけでは、fetch()のPromiseはrejectされないよ。response.okは200番台ならtrueになるので、目的に応じてokやstatusを確認しよう。ネットワークエラーやリクエストの中断などは、別に失敗として扱われるんだ。
ひよこ ひよこ
途中で止めたり、別サイトへ送ったりできる?
ペンギン先生 ペンギン先生
AbortControllerのsignalを渡しておけば、abort()で中断できるよ。ブラウザで別のオリジンの応答を読むには、相手のCORS設定も関わる。no-corsを指定しても本文を自由に読めるわけではなく、応答が不透明になるんだ。
ひよこ ひよこ
XHRやAxiosは、もう使わないの?
ペンギン先生 ペンギン先生
XMLHttpRequestも引き続き使えるAPIだよ。FetchはPromiseを使う別の方法なんだ。Axiosは追加で導入するHTTPクライアントで、タイムアウトや処理の共通化などの機能がある。Fetchを使うアダプターも選べるけれど、常にFetchだけを包んだもの、というわけではないよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Fetch API」って出てきたら「JavaScriptでリクエストを送り、サーバーの応答を扱うAPI」と思えばだいたいOK!
📖 おまけ:英語の意味
「Fetch API」 = 取得 API
💬 Fetchは「取ってくる」という意味。サーバーからデータを「取ってくる」ためのAPIだよ

参考資料

← 用語集にもどる