コース一覧
非同期JavaScript:API通信とモジュール
HTTP と REST の読みかた

非同期JavaScript:API通信とモジュール

Promise と async/await、非同期エラー、HTTP/REST、fetch による GET、読み込み・成功・失敗の表示、モジュールの読み方を学ぶ全 19 レッスン(380 分)のコースです。最後は承認済みの読み取り専用 API から作品データを取得して表示します。POST はリクエストの組み立てまでで、外部サービスへの書き込みは行いません。

1
非同期処理
0. 同期と非同期15分
1. Promise をつくって返す20分
2. async と await20分
3. Promise.all で同時に待つ20分
4. 非同期のエラーを捕まえる20分
5. つくる 読み込み中の表示を出す30分
6. 第1章まとめクイズ10分
2
fetch で外のデータを使う
0. HTTP と REST の読みかた15分
1. fetch でデータを取る25分
2. 取ったデータを描画する25分
3. response.ok と失敗時の表示25分
4. POST のリクエストを組み立てる20分
5. つくる 作品データを API から読む30分
6. 第2章まとめクイズ10分
3
モジュールと総仕上げ
0. ファイルを分けるという考えかた15分
1. named export と default export15分
2. つくる ポートフォリオアプリを仕上げる40分
3. ここから先の学びかた15分
4. 第3章まとめクイズ10分

非同期JavaScript:API通信とモジュール

01同期と非同期
02Promise をつくって返す
03async と await
04Promise.all で同時に待つ
05非同期のエラーを捕まえる
06つくる 読み込み中の表示を出す
07第1章まとめクイズ
08HTTP と REST の読みかた
09fetch でデータを取る
10取ったデータを描画する
11response.ok と失敗時の表示
12POST のリクエストを組み立てる
13つくる 作品データを API から読む
14第2章まとめクイズ
15ファイルを分けるという考えかた
16named export と default export
17つくる ポートフォリオアプリを仕上げる
18ここから先の学びかた
19第3章まとめクイズ

非同期JavaScript:API通信とモジュール

HTTP と REST の読みかた

GET と POST
解説

このレッスンで分かること

  • ブラウザとサーバーのやりとりを、リクエストとレスポンスに分けて読めます
  • 返ってきた 3 桁の数字から、次にやるべきことが決まります

データを手で書き換え続けるのは無理がある

ここまで、作品の一覧は自分のファイルの中にありました。works という配列を手で書いて、それを描画していたわけです。作品が増えるたびにファイルを開いて書き足し、また公開し直す。これが成り立つのは、自分ひとりの小さなページだけです。

これから扱うのは、自分のファイルには無いデータです。どこか別のコンピューターに置いてあるものを、その場でもらってきて画面に出します。このもらいかたを決めているのが HTTP です。仕組みはとても単純で、こちらから 1 つ送ると、あちらから 1 つ返ってきます。送るほうをリクエスト、返ってくるほうをレスポンスと呼びます。

JavaScript

// ブラウザが送るもの (リクエスト) // GET /course-api/works.json HTTP/1.1 // Host: yumesaku.tech // サーバーが返すもの (レスポンス) // HTTP/1.1 200 OK // Content-Type: application/json // // {"count":5,"works":[ ... ]}

読むのは 2 か所だけです。リクエストの 1 行目にある動詞と場所、レスポンスの 1 行目にある 3 桁の数字。ここさえ読めれば、たいていのやりとりは追えます。Content-Type が application/json なら、本文は JSON の文字列だという意味です。

URL は名詞、メソッドは動詞

リクエストの先頭にある GET や POST をメソッドと呼びます。そのデータに対して何をする気か、を表す動詞です。一方の URL は名詞で、/works は作品たち、/works/3 は 3 番の作品を指します。

動詞を URL に入れません。同じ URL に対してどのメソッドを送るかで区別する。この決めかたを REST と呼びます。

JavaScript

// REST らしくない形。動詞が URL に入り込んでいる // GET /getAllWorks // GET /deleteWorkById?id=3
したいことメソッド送り先
作品を全部くださいGET/works.json
2 番の作品をくださいGET/works/2.json
新しい作品を足してくださいPOST/works.json
2 番の作品を消してくださいDELETE/works/2.json

REST は法律ではないので、世の中には動詞入りの URL も存在します。ただ、そろえておくと URL を見ただけで中身が想像できるので、読む側の負担が減ります。このコースで使う練習用の口も、この形にそろえてあります。

3 桁の数字が、次の一手を決める

レスポンスの先頭にある 3 桁の数字をステータスコードと呼びます。全部覚える必要はありません。百の位だけ見れば意味が取れます。

  • 200 は、うまくいったという返事です
  • 404 は、その場所には何も無いという返事です。URL の綴りか、指定した番号を疑います
  • 500 は、サーバーの中で壊れたという返事です。こちらが何度送り直しても同じです

4 で始まるものは、こちらの送りかたを直せば解決します。5 で始まるものは、時間を置くか、そのサーバーの持ち主に伝えるしかありません。うまくいかないと報告するときは、この 3 桁を必ず添えてください。404 と 500 では、次にやるべきことが正反対になります。

URL の後ろに ? を付けると、そこから先は「どう返してほしいか」の細かい注文になります。これをクエリ文字列と呼び、名前=値 の形で書きます。練習用の口には次の 3 つを用意してあります。

JavaScript

// 800 ミリ秒だけ遅れて返る。待ちの表示を確かめられる // https://yumesaku.tech/course-api/works.json?delay=800 // 500 が返る。失敗の道を通せる // https://yumesaku.tech/course-api/works.json?status=500 // 一覧が 0 件で返る。空のときの表示を確かめられる // https://yumesaku.tech/course-api/works.json?empty=1

通信が絡む画面は、うまくいったときだけ試しても完成しません。遅いとき、失敗したとき、中身が空のとき。この 3 つは自分の手で起こせるようにしてあります。

解説

ここまでの話は、ブラウザの開発者ツールのネットワークタブでそのまま観察できます。1 往復が 1 行として並び、行を選べばメソッド、URL、ステータスコード、本文が全部見えます。コードを疑う前に、実際に何を送って何が返ってきたかを見る。この順番を身につけておくと、詰まる時間がかなり短くなります。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • ブラウザユーザーから見たWebのクライアント
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
  • 配列サイズ固定の同型データの集まり
  • HTTPWeb の通信プロトコル、HTTPS は TLS で暗号化したもの
  • applicationJSON 本文を送るときの Content-Type
  • URLページの住所全体
  • メソッドクラスに属する関数
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/03/27·更新 2026/08/26

関連レッスン

  • fetch でデータを取る

    fetch で練習用の API からプロフィールを取ってきて、名前と肩書きとスキル一覧を画面に出します。

  • 取ったデータを描画する

    API から受け取った作品の配列をカードの一覧に変え、待っている間の表示と件数もあわせて出します。

  • response.ok と失敗時の表示

    わざと 500 を返す URL を使い、response.ok で成功と失敗を分けて、失敗を利用者に見える形で画面に出します。

  • POST のリクエストを組み立てる

    送り先の URL、メソッド、ヘッダー、本文をひとまとまりとして組み立てます。送信そのものはこのコースでは扱いません。

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。