JavaScriptにおいて、XMLHttpRequest(XHR)に代わるAPIとして、Fetch APIというものが提供されるようになりました。XHRと同等の機能を提供しますが、Fetch APIはよりシンプルで強力です。使い方を学んでみましょう。

Fetch API

基本的な使い方

Fetch APIはPromiseベースの簡単なAPIです。リクエストするにはfetch(url)を呼び出すだけです。

fetch()メソッドはPromiseを返します。PromiseはResponseオブジェクトとして解決されます。返ってきたPromiseを実際に処理してみましょう。

Responseオブジェクトはいくつかのメソッドを持ちます。text()メソッドはレスポンスの内容を、テキストとして解決するPromiseとして返します。Responseオブジェクトは以下のようなメソッドを持っています。

  • arrayBuffer()
  • blob()
  • json()
  • text()
  • formData()

各メソッドは目的に合わせて使用してください。

Fetch APIの基本的な使い方はこれだけです。たったこれだけでリクエストを送信することができるのです。

fetchが成功したかを調べる

Responseオブジェクトはokプロパティを持ちます。okプロパティを確認することで、ステータスコードが200から299の間にあるか、つまり正常にアクセスできたかどうかを調べることができます。

ここで注意したいのは、仮に404であってもfetchメソッドは例外をスローしないということです。fetchが例外をスローするのは、ネットワークエラーなどに限ります。fetchが成功したかどうかを調べるには、okプロパティを使用してください。

設定を指定する

fetchメソッドは引数を2つ取ります。2つ目の引数はオプションです。2つ目の引数に設定を指定することで、様々なリクエストができます。以下は一例です。

methodは文字どおりメソッドを指定します。GETやPOSTなど、必要に合わせて設定しましょう。

modeはリクエストのモードです。no-cors、cors、same-originが指定できます。CORS通信によるクロスドメイン通信をするときは、ここでcorsを指定します。

credentialsはクレデンシャルの扱いを指定します。デフォルトはomitです。クッキー等はデフォルトでは含まれません。リクエストにクッキー等のクレデンシャルを含ませたい場合は、same-originやincludeを指定します。

その他にも様々な設定が存在します。詳しくはMDN(https://developer.mozilla.org/ja/docs/Web/API/GlobalFetch/fetch)をご覧ください。

ヘッダやボディを指定する

リクエストのヘッダやボディを指定することもできます。

ただし、メソッドがGET/HEADの場合、ボディは指定できません。

Headersオブジェクトは単純なMapです。値を追加したり、取得することができます。

ボディは以下のいずれかのオブジェクトです。

  • ArrayBuffer
  • ArrayBufferView
  • Blob
  • File
  • 文字列
  • URLSearchParams
  • FormData