PUT と PATCH — 「一部だけ更新」はどっち?
解説
正解は PATCH です。PATCHは「パッチを当てる」、つまりリソースの一部だけを修正するためのメソッドです。一方PUTは「リソースを丸ごと置き換える」メソッドで、送らなかったフィールドは消える(またはデフォルト値に戻る)のが原則です。PUTが「丸ごと置換」と言われる理由PUTの仕様(RFC 7231)は「指定したURLのリソースを、リクエストボディの内容で完全に置き換える」と定義しています。たとえばユーザー情報が { name, email, age } の3フィールドを持つとき、PUTで { name: '太郎' } だけ送ると、仕様上は email と age が消えることになります。// PUT /users/1 // リクエストボディ { "name": "太郎" } // 結果(仕様通りなら) { "name": "太郎", "email": null, "age": null }一方PATCHなら、送ったフィールドだけが更新され、残りはそのままです。// PATCH /users/1 // リクエストボディ { "name": "太郎" } // 結果 { "name": "太郎", "email": "taro@example.com", "age": 25 }現実のAPIではPUTでも部分更新できることが多い仕様上はPUT=全体置換ですが、実際のAPIではPUTで送らなかったフィールドを保持する実装も少なくありません。そのためPUTとPATCHの違いが曖昧に感じられがちです。ただし、API設計のベストプラクティスとしては意味を分けるのが推奨されています。RESTful APIの設計レビューで「なぜPATCHではなくPUTを使っているのか」と聞かれたとき、意図を説明できるようにしておくと安心です。覚え方:「パッチ=絆創膏」PATCHは英語で「継ぎ当て・絆創膏」の意味があります。傷んだ部分だけを補修するイメージです。PUTは「置く(put)」なので、まるごと新しいものを置き直す。この語感で覚えると混同しにくくなります。もう一つの違い:冪等性PUTは冪等(べきとう)です。同じリクエストを何度送っても結果が同じになります。PATCHは冪等とは限りません。たとえば「ageを+1する」というPATCHを2回送れば、結果が変わります。この違いはリトライ処理やキャッシュ設計に影響するため、API設計では意識しておきたいポイントです。