PUTとPATCHの違いをあまり気にしてこなかった

基本的にフロントエンドなので、仕様書に書かれているメソッドでAPIと通信してきた。

ただ今回、自身が作る側に回り、PUTPATCHの違いがいまいちピンとこなかったので、調べてみた。

結論

PUTはリソースの完全な置き換えで、PATCHはリソースの一部分のみを更新する場合とのこと。

例えば、

{
  "name": "John Doe",
  "age": 30,
  "email": "john@example.com"
}

というデータがあり、31歳に変更する場合を考えてみる。

PUTの場合

PUT /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "John Doe",
  "age": 31,
  "email": "john@example.com"
}

といった感じに変更した年齢以外もまるっと送る必要がある。

PATCHの場合

対してPATCHの場合は、

PATCH /users/123 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "age": 31
}

となる。

どっちを使うべきか

まあ、この感じだと一部だけを更新したい場合はPATCHを使用するべきなんだと思うけど、その場合はフォームの一部だけが変更されたという監視が必要になるので、それなりの工数がかかる。そのためPUTでいいかなといった結論になりました。