HTTP
HTTP
クライアントとサーバーがデータをやり取りするための、リクエスト/レスポンス型のプロトコル。『動詞(GET等)+ リソース(URL)』で操作を表す。Web通信の土台。
基本構造: 動詞 + リソース
HTTPの操作は『何を(リソース=URL)どうする(動詞=メソッド)』という形で表現します。
GET /users/123= ユーザー123を取得するDELETE /users/123= ユーザー123を削除するPOST /users= ユーザーを新規作成する
図を描画中...
HTTPメソッドの性質(重要な3軸)
| メソッド | 用途 | 冪等? | 安全? | キャッシュ可? |
|---|---|---|---|---|
| GET | 読み取り | Yes | Yes | Yes |
| POST | 作成/処理 | No | No | 条件付き |
| PUT | 作成/置換 | Yes | No | No |
| PATCH | 部分更新 | No | No | 条件付き |
| DELETE | 削除 | Yes | No | No |
用語をかみ砕く
- 冪等(idempotent): 同じリクエストを何回送っても結果が同じ。
DELETE /users/123は1回でも10回でもユーザー123は消えた状態で変わらない。一方POST(新規作成)は送るたびに新しいデータが増えるので冪等でない。 - 安全(safe): サーバーの状態を変えない。GETは読むだけなので安全。
- キャッシュ可: 結果を使い回せる。GETは安全なのでキャッシュしやすい。
図を描画中...
なぜ冪等性が大事か
ネットワークは不安定で、リクエストが届いたか分からないことがあります。冪等なメソッドなら、不安なら安全に再送できます(2回届いても害がない)。POSTを安易に再送すると二重注文などの事故になるので、再送設計で冪等性は超重要です。
つまずきポイント
- POSTが冪等でないのは『送るたびに新しいリソースができる』から。決済や注文でPOSTを再送する際は、二重実行防止(冪等キー)が必要。
- HTTPは下位のTCP(通常)の上に乗る。だからTCPの『順序保証・再送』といった特性をそのまま受け継ぐ。