HTTP リクエストの実体は、回線を流れるただのテキスト。メソッド・パス・ヘッダ・ボディの4部品でできていて、この4つの名前がわかればどんなリクエストも読める。
| 部品 | 役割 | 例 |
|---|---|---|
| メソッド | 何をしたいか | GET:取得 / POST:作成 / PUT・PATCH:更新 / DELETE:削除 |
| パス | どの資源に対してか | /users/42 = 42番のユーザー |
| ヘッダ | メタ情報(データの取り扱い説明) | Authorization(認証)、Content-Type(データ形式) |
| ボディ | 渡すデータ本体 | GET では空。POST / PUT で使う |
ユーザーを新規作成する POST リクエストは、実際にはこのテキストが回線を流れている。
POST /users HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGci...
Content-Type: application/json
{"name": "imutaro", "role": "engineer"}
/users)GET は「取得」なので渡すデータがなく、ボディごと消えて1行目+ヘッダだけになる。
GET /users/42 HTTP/1.1
Host: api.example.com
Accept: application/json
ボディ=データそのもの、ヘッダ=そのデータの「取り扱い説明」。{"name": "imutaro"} だけ届いても、サーバーはそれが JSON かどうか(Content-Type)も、誰の操作か(Authorization)も判断できない。
しかも HTTP はステートレス=サーバーは前回の注文を覚えていない。だから「私は誰で、どんな形式で送るか」を毎回の注文票に全部書く必要があり、その置き場所がヘッダ。