PUTとPATCHの違いが気になった

こんにちは!kossyです!



本日の気になったニュースはこちら
www.itmedia.co.jp


システムにアクセスするデバイスとして、従業員にはiPadを配布した。
ITに慣れない従業員に使ってもらうのは、難しい面もあったというが、勤怠管理システムがリリースされてからは状況が一変。
ログインしないと給料が発生しないため、従業員全員がシステムを使うようになったという。
個人的にはこの一節がなるほどなと思いました。

あるやり方を浸透させるためには、そのやり方をせざるを得ない仕組みを作るのが重要だなと思います。














さて、今回はPUTとPATCHの違いをブログに残してみたいと思います。
(例としてRailsを使います)


RailsではresourcesでPUTもPATCHも生成される

Railsではルーティングを定義する時にresourcesを用いることがありますが、
その際にonlyやexcept等のオプションを使わないと、以下のようなパスが生成されます。

$ rails g scaffold product name:string contents:text

$ rails routes

products     GET    /products(.:format)          products#index
             POST   /products(.:format)          products#create
new_product  GET    /products/new(.:format)      products#new
edit_product GET    /products/:id/edit(.:format) products#edit
product      GET    /products/:id(.:format)      products#show
             PATCH  /products/:id(.:format)      products#update
             PUT    /products/:id(.:format)      products#update
             DELETE /products/:id(.:format)      products#destroy

* updateアクションに二つのHTTPメソッドが定義される

この時、PUTとPATCHというHTTPメソッドが生成されますが、
どちらもリソースを更新するという意味では同じです。

ではどちらを使えばいいのでしょうか。

基本的にはPATCHを使う

両者の違いとして、PUTメソッドはリソースそのものの更新を表すのに対し、PATCHメソッドはリソースの部分更新を表します。
投稿内容の編集、プロフィールの内容の更新などは、基本的にはリソースの部分更新なので、PATCHを使うことが多いです。


じゃあPUTはいつ使うのか


ファイルアップロードのような、指定したURLにあるリソースをまるごと置換えるような処理はPUTを使います。
出典: https://qiita.com/murata0705/items/52538c08778c39a91ec2
PUTはリソースそのものの更新を表すため、URLをまるっと変更するものはPUTを使うということでよさそうです。



参考にさせていただいた記事
リソースの一部更新におけるURL設計
PatchとPutの違いについて