📖

POST, PUT, PATCHの違い

2022/05/16に公開

はじめに

REST APIを使っているとPOST、PUT、PATCHの使い方に悩むことがある。特にPUTとPATCHの違いは分かりずらい上に実際の挙動を見て戸惑うこともありました。

REST APIで各HTTPメソッドがどのように振る舞うかは実装依存なのでケースバイケースで調査する必要があるが一般的な定義を覚えておくと理解が早くなると思いまとめました。

POST

  • リソースを作成する
  • 多くのAPIで実装されている

PUT

  • 既存リソースの新しいものに置き換える
  • 新しいリソースの中に既存リソースにある要素がない場合、その要素は削除される
  • PUTがないAPIもある

PATCH

  • 既存リソースに新しいものを付け足す
  • 新しいリソースの中に既存リソースにある要素がない場合でもその要素は削除されない
  • PATCHがないAPIもある

URIの違い

POSTメソッドはリソースの新規作成になり、PUTもそれに似たものになりますがURIが違います。
POSTは下記のようにエンドポイントになります。
https://api.example.com/v1/users

PUTメソッドの場合は更新したいリソースそのものを指したURIになります。このURIだとUsersのIDが12345番を指すことになります。
https://api.example.com/v1/users/12345
しかしPUTは送信するデータそのもので対象(今回だとUsersの12345番)を上書きするイメージになるので、もし保存してあるデータの一部だけ更新したい場合はPATCHを使用するようになります。
大事なのは、PUTは既存リソースを「置き換える」。PATCHは「付け足す」。そしてそれ以外の要素が削除されるかされないかに違いがポイントになるのかなと思います。

PATCHメソッドのURIもPUTと同じデータそのものを指したURIとなります。

Discussion