2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fetchを書く前に理解したい API通信の基本 〜ブラウザとサーバーの通信の流れを整理する〜

2
Posted at

fetchを書く前に理解したい API通信の基本

〜ブラウザとサーバーの通信の流れを整理する〜

Web開発を勉強していると、ReactやJavaScriptでこんなコードをよく見かけます。

fetch('/api/products')

でも最初の頃は、

  • APIって何?
  • なんで通信してるの?
  • fetchって何をしてるの?
  • request / responseって何?

と混乱しませんか?

自分も最初は「とりあえず書いてる」状態でした。

この記事では、

  • API通信とは何か
  • ブラウザとサーバーがどうやって通信しているのか
  • fetchが何をしているのか

を初心者向けに整理していきます。


API通信って何?

簡単に言うと、

「ブラウザとサーバーがデータをやり取りすること」

です。

例えば、

  • YouTubeで動画一覧を取得する
  • ECサイトで商品を表示する
  • SNSで投稿を取得する
  • 天気情報を取得する

こういった処理は、ほとんどAPI通信で行われています。


なぜAPI通信が必要なの?

例えばECサイトを考えてみます。

ブラウザ側だけでは、

  • 商品一覧
  • 在庫情報
  • ユーザー情報

などを持っていません。

そこで、

「商品データください!」

とサーバーにお願いする必要があります。

その時に使われるのがAPI通信です。


API通信の全体の流れ

まずは全体像を見てみます。

ブラウザ
 ↓ request(お願い)
サーバー
 ↓ response(返答)
ブラウザに表示

流れとしてはかなりシンプルです。


requestとは?

request(リクエスト)は、

「サーバーへのお願い」

です。

例えば、

「商品一覧をください」

というメッセージを送ります。

ブラウザは、

  • どこのサーバーに送るのか
  • 何が欲しいのか
  • どんなデータを送るのか

をまとめて送信します。


responseとは?

response(レスポンス)は、

「サーバーからの返答」

です。

例えばサーバーは、

[
  {
    "name": "りんご",
    "price": 100
  },
  {
    "name": "みかん",
    "price": 150
  }
]

のようなデータを返します。

このデータを使って、画面に商品一覧を表示します。


JSONって何?

API通信では、JSONという形式がよく使われます。

JSONは、

「データをやり取りするための書き方」

です。

例えば:

{
  "name": "りんご",
  "price": 100
}

これは、

  • name → 商品名
  • price → 値段

を表しています。

JavaScriptと相性が良いため、Web開発では非常によく使われます。


fetchは何をしているの?

ここでようやく fetch が登場します。

例えば:

fetch('/api/products')

これは簡単に言うと、

「/api/products に通信してください」

という意味です。

つまりfetchは、

「API通信を行うための機能」

です。


fetchの流れ

実際にはこんな流れになります。

React
 ↓
fetch()
 ↓
APIサーバー
 ↓
JSONが返ってくる
 ↓
画面を更新

Reactアプリでは、この流れが非常によく使われます。


なぜ非同期なの?

API通信はすぐ終わるとは限りません。

例えば:

  • サーバーが遠い
  • 通信が混雑している
  • データ量が多い

などの場合、時間がかかります。

もし通信が終わるまで画面を完全停止してしまうと、ユーザー体験が悪くなります。

そこでJavaScriptでは、

「通信を待っている間も画面を動かせる仕組み」

として非同期処理が使われます。

そのため、

  • Promise
  • async / await

などが登場します。


API通信で初心者がつまずきやすいポイント

URL間違い

fetch('/api/product')

fetch('/api/products')

では別物です。


通信失敗

サーバーが止まっていると取得できません。


JSONの扱い

レスポンスをそのまま使えず、

response.json()

が必要だったりします。


データ取得前に画面が表示される

非同期なので、

data.name

を書いた瞬間には、まだデータが存在しない場合があります。

そのため、

  • loading管理
  • nullチェック

などが必要になります。


まとめ

API通信は最初難しく感じますが、流れは意外とシンプルです。

ブラウザ
 ↓ request
サーバー
 ↓ response
ブラウザに表示

まずはこの全体像を理解すると、fetchのコードもかなり読みやすくなります。

最初は「とりあえずfetchを書く」状態でも大丈夫です。

少しずつ、

  • request
  • response
  • JSON
  • 非同期処理

の役割が分かってくると、一気に理解が進むと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?