クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

HTTP リクエストの読み方

このレッスンのあとで: HTTP のリクエストとレスポンスを読み取れる。

55分のレッスンコマンド7件PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

HTTP は Web の会話の決まり

HTTP(ハイパーテキスト転送プロトコル)は、Web でデータをやり取りする決まりです。アプリがリクエストを送り、サーバーがレスポンスを返します。

大学図書館の貸出アプリは、本の一覧を出すたびに、この会話をしています。読み方がわかれば、API で何が起きたかを自分で調べられます。

このレッスンのゴール

メモ

HTTP のリクエストとレスポンスを読み取れる。

重要な言葉

ことばいみれい
リクエストクライアントがサーバーに送る依頼
レスポンスサーバーが返す答え
メソッド依頼の種類を表す動詞GET
ヘッダー送り方を説明する、名前と値の組Accept: application/json
ボディ送る、または返ってくる中身のデータ
ステータスコード結果を表す3桁の番号404

学生が入力するセルは、このプレビューでは空白です。

リクエストは4つの部分でできている

リクエストは、メソッド、パス、ヘッダー、ボディの4つでできています。

メソッドは、何をしたいかです。パスは、どの資源を相手にするかです。ヘッダーは、付け足しの情報です。ボディは、送りたいデータです。

本を読むだけの GET には、ふつうボディがありません。

例: 1つのリクエストを分ける

部分書いてある内容役目
最初の行GET /books?id=eq.1 HTTP/1.1メソッドとパス
ヘッダーAccept: application/jsonJSON で返してほしい
空の行(何も書かない)ヘッダーの終わり
ボディ(GET では空)送るデータ

学生が入力するセルは、このプレビューでは空白です。

レスポンスは状態、ヘッダー、ボディ

レスポンスの最初の行は、状態の行です。HTTP/1.1 200 OK のように、ステータスコードと短い説明が並びます。

その後にヘッダーが続き、空の行をはさんでボディが来ます。API のボディは、たいてい JSON というテキストです。

curl はリクエストを送るツール

curl は、ターミナルから HTTP リクエストを送るツールです。このラボのターミナルで使えます。

まず、大学図書館の本の表を作ります。順番に Run してください。サーバーの名前は api で、ポートは 3000 です。

psql にパスワードを渡す

コマンド
export PGPASSWORD=shop

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

本の表を作り直す

コマンド
psql -h db -U shop -c "drop table if exists books; create table books (id serial primary key, title text not null, author text not null, year int not null, copies int not null default 1); insert into books (title, author, year, copies) values ('Networks in Practice', 'Mori', 2019, 3), ('Learning SQL', 'Tanaka', 2021, 2), ('Web Design Basics', 'Suzuki', 2018, 0), ('Intro to APIs', 'Kato', 2022, 5); notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

1冊の本を読む

コマンド
curl -s -w "\n" "http://api:3000/books?id=eq.1"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

レスポンスのヘッダーを見る

コマンド
curl -s -D - -o /dev/null "http://api:3000/books?id=eq.1"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

番号と種類だけを見る

コマンド
curl -s -o /dev/null -w "%{http_code} %{content_type}\n" "http://api:3000/books"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

curl の3つの印が4つの部分を作る

-X はメソッドを選びます。-H はヘッダーを1つ付けます。-d はボディを渡します。

-d を使うと、curl は自分から POST にします。JSON を送るときは、Content-Type: application/json のヘッダーも付けます。

本を1冊足して、番号を見る

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"title":"Data Basics","author":"Ito","year":2023,"copies":1}' "http://api:3000/books"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

足した本を確かめる

コマンド
curl -s -w "\n" "http://api:3000/books?order=id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

ヘッダーとボディを、同じものだと考えがちです。ヘッダーは、送り方についての説明です。ボディは、送る中身そのものです。-H は説明を付け、-d は中身を渡します。

このラボとソースについて: PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。