HTTP メソッドは慣習ではなく「契約」である¶
ほとんどの開発者は HTTP メソッドを単なる慣習だと思っている。
違う。これは契約だ。
メソッド別の特性一覧¶
| メソッド | 用途 | 安全 | 冪等 | キャッシュ | ボディ |
|---|---|---|---|---|---|
| GET | リソースの取得(読み取り専用) | ✓ | ✓ | ✓ | – |
| POST | リソースの新規作成 | ✗ | ✗ | – | ✓ |
| PUT | リソース全体の置き換え | ✗ | ✓ | – | ✓ |
| PATCH | リソースの部分更新 | ✗ | ✗ | – | ✓ |
| DELETE | リソースの削除 | ✗ | ✓ | – | – |
重要な概念¶
| 概念 | 意味 | 実際の影響 |
|---|---|---|
| 安全(Safe) | サーバー側の状態を変更しない | GET をキャッシュ・プリフェッチしても副作用なし |
| 冪等(Idempotent) | 同じリクエストを何回送っても結果が同じ | リトライ時に二重処理が起きない |
契約違反の典型例¶
-
GET でデータを変更する: キャッシュに乗り変更が実行されなくなる危険
-
POST をリトライする: 非冪等なため二重レコードが生まれる可能性(冪等キーで対処)
-
DELETE を複数回叩く: 冪等なので 2 回目は 404 でよい(エラーにすべきでない)
-
PUT で部分更新する: 省略フィールドが消える。部分更新には PATCH を使う
要点¶
-
HTTP メソッドはクライアント・サーバー・インフラ(CDN・プロキシ)間の契約
-
冪等性の違反はリトライ設計を壊し、重複処理・データ不整合を招く
-
POST を「なんでも処理するメソッド」として使うのは契約違反