コンテンツにスキップ

HTTP メソッドは慣習ではなく「契約」である

ほとんどの開発者は HTTP メソッドを単なる慣習だと思っている。

違う。これは契約だ。

メソッド別の特性一覧

メソッド 用途 安全 冪等 キャッシュ ボディ
GET リソースの取得(読み取り専用)
POST リソースの新規作成
PUT リソース全体の置き換え
PATCH リソースの部分更新
DELETE リソースの削除

重要な概念

概念 意味 実際の影響
安全(Safe) サーバー側の状態を変更しない GET をキャッシュ・プリフェッチしても副作用なし
冪等(Idempotent) 同じリクエストを何回送っても結果が同じ リトライ時に二重処理が起きない

契約違反の典型例

  • GET でデータを変更する: キャッシュに乗り変更が実行されなくなる危険

  • POST をリトライする: 非冪等なため二重レコードが生まれる可能性(冪等キーで対処)

  • DELETE を複数回叩く: 冪等なので 2 回目は 404 でよい(エラーにすべきでない)

  • PUT で部分更新する: 省略フィールドが消える。部分更新には PATCH を使う

要点

  • HTTP メソッドはクライアント・サーバー・インフラ(CDN・プロキシ)間の契約

  • 冪等性の違反はリトライ設計を壊し、重複処理・データ不整合を招く

  • POST を「なんでも処理するメソッド」として使うのは契約違反