【コピペでOK!】fetch関数でデータを取得しよう!【JavaScript】

JavaScript

みなさんこんにちは、現役エンジニアのサメハックです

アパレル企業でトップ販売員を経て
未経験からWebエンジニアに転職し、
現在正社員として5年働いています!

今回はREST APIとfetchについて学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • REST APIがなにかわかる
  • fetch関数を使えるようになる
  • データ取得処理をとりあえず動かせる
  • 本番で使えるコードがコピペできる

REST APIを叩こう!

APIとは

超~~~ざっくりいうと、誰かが作ったなにかしらの機能のまとまりです。

例えばですが、OpenWeatherMapという天気予報サイトが
公開しているAPIを実行すると、お天気情報が取得出来たり

Yahoo!が公開しているAPIを実行すると
ヤフーニュースの情報が取得出来たりします。

イメージとしては他のシステムの情報を取得するWeb上の関数みたいなものだよ!

サンプル用API

今回は以下のサンプルサイトのAPIを叩きます

https://jsonplaceholder.typicode.com/users?id=1

REST APIとは

一言でいうと、URLを指定して実行するAPIです。

Web APIとほぼ同義なのですが、
インターネット上に公開されているので
HTTP通信を行うことで実行が可能となります。

詳しくは後述しますが、URLに対して以下のリクエストを送信し、
レスポンスをjson形式もしくはXML形式で受け取ります。

■主なリクエストの種類

  • GET データ取得
  • POST データ送信
  • PUT データ送信(更新)
  • PATCH データ更新
  • DELETE データ削除

ちなみに先ほど記述したサイトの以下のURLをブラウザで開くと、
何やらデータが表示されたと思います。

https://jsonplaceholder.typicode.com/users?id=1

この行為がまさに、REST APIを叩く!ということです。

ちなみにこれは”ウェブサイトを開いた”ではなく、

URLを指定することでREST APIを叩き、データをブラウザに表示した!

という認識が正しいです。

このデータをブラウザではなく、
JavaScriptで取得するのが今回の目標です。

REST APIとは、URLを指定して実行するAPI、とだけ覚えていればOKだよ

fetch関数を使ってREST APIを叩こう

fetch関数とは

fetch関数とは、API等を叩いてデータを取得する非同期関数です。

■構文

fetch(REST APIのURL, {methods: リクエストの種類})

非同期処理について復習したいかたはこちらを!!

【JavaScript】同期処理と非同期処理【わかりやすく図解!】
fetchはデータを取得するための関数だよ!

fetch関数の実際の使い方

fetch関数は非同期通信なので、
使用する上で一定のお作法があります。

■構文

async 非同期処理を含む関数名等 = () => {
    // awaitを使ってfetchの完了を待つ
    const response = await fetch(REST APIのURL, {methods: リクエストの種類});
}

このように記述します。
ここはややこしいですが、こういうものだ、と覚えましょう。

asyncとawaitについて復習したい方はこちらを見よう!

【JavaScript】asyncとawaitを図解でわかりやすく解説!【非同期処理】

実際に処理を作ろう

ここでは以下の処理を作っていきます

  • fetch関数でREST APIを叩く
  • fetchが完了するまで処理を待機
  • 戻り値をjson形式に変換する

これまでの知識を生かして、
fetch関数を同期処理にして叩き、
取得したデータをjson形式に変換してみましょう!

※今回のサンプルはPaizaIOでは動かないので、
自身の環境で動かすか、CodePenにて動作させてみてください。

CodePen
An online code editor, learning environment, and community for front-end web development using HTML, CSS and JavaScript code snippets, projects, and web applica

// 今回叩くAPI
const MY_API = "https://jsonplaceholder.typicode.com/users?id=1";

// awaitを含む関数なので、asyncを付与
async function getData() {
  // MY_APIのGETメソッドを実行
  // awaitを使ってfetchの完了を待つ
  const response = await fetch(MY_API, { methods: "GET" });
  
  // json型に変換する  
  const jsonData = await response.json();
  console.log(jsonData);
};

getData();
【出力結果】
[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  }
]

このように、以下のサンプルAPIをブラウザ上で開いた時と
同じデータを表示できれば成功です!

https://jsonplaceholder.typicode.com/users?id=1

理屈はすごーーーーくややこしくて、一度で理解はできないと思いますが、
いざ記述してみるとそんなに難しくないことがわかります。

きちんと理解するのは本当に大変なので、なんとなく動かせるかな?
という状態を作ることが大切です。

これでREST APIを叩くことができたよ!
今回は難しかったですね、本当にお疲れさまっ!!

本番環境で使えるデータ取得処理!! コピペ用

頑張った皆さんへ、現場で使えるレベルの汎用性が高いコードを
作っておいたのでよければ使ってみてください。

fetchのエラーチェックもはいっているので非常に使いやすいと思います。

const MY_API = "https://jsonplaceholder.typicode.com/users?id=1";

/**
 * データ取得用関数
 * @param {String} api APIのURL、またはパス
 * @return {Array} 取得データ
 */
const getData = async (api) => {
  console.log("データ取得開始");
  // awaitを使ってfetchの完了を待つ
  const response = await fetch(api, { methods: "GET" });
  // fetch関数が正常終了したかの確認
  if (response.ok) {
    console.log("データ取得完了");
    // json型に変換
    const jsonData = await response.json();
    // データをリターン
    return jsonData;
  } else {
    alert("データ取得失敗");
    // 場合によっては response.statusText でもよい
    throw new Error("エラーステータス: " + response.status);
  }
};

// メインの処理
(async () => {
  const myData = await getData(MY_API);
  // ここから任意の処理をつくってください!
  console.log("↓↓↓↓↓↓↓↓myData↓↓↓↓↓↓↓↓");
  console.log(myData);
})();

まとめ

  • APIとは、他のシステムの情報を取得するWeb上の関数のようなもの
  • REST APIとは、URLを指定して実行するAPI
  • fetch関数とは、API等を叩いてデータを取得する非同期関数
  • fetch(REST APIのURL, {methods: リクエストの種類})

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました