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/json | JSON で返してほしい |
| 空の行 | (何も書かない) | ヘッダーの終わり |
| ボディ | (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 は中身を渡します。