PUTメソッドとPATCHメソッドの違い
PUTメソッドとPATCHメソッド
railsで新しくリソース更新用のrouteを追加しようとしました
put 'new-route/:id', action: 'new-action'
が、エラーになってしまいました
Routing Error No route matches [PATCH] '/new-route'
あー、putメソッドじゃなくてpatchメソッドなのかー
と思いroutes.rbを修正してエラーは消えたんですが
そういえばputとpatchってどう違うんだって思ったので調べてみました
この記事を参考に書いてます medium.com
どう違う?
どちらもリソースの更新をするときに使いますがどう違うのか?
一言で言えばputではリソースの交換をして、patchではリソースの部分的な修正をします
例えば以下のような
- 名前: taro
- 年齢: 15歳
- 部活: サッカー部
というリソースが登録されているとします
# resource { id: 1, name: "taro", age: 15, club: "soccer" }
ここでtaro君の部活をサッカー部から野球部に更新するとします
putの場合
まずはputメソッドを使って更新します
putメソッドはリソースの交換と言いました
どういうことかというと
- 名前: taro
- 年齢: 15歳
- 部活: サッカー部
というリソースを
- 名前: taro
- 年齢: 15歳
- 部活: 野球部
と交換します。部活だけ更新するようなことはできません。
なのでputメソッドで更新を行おうとすると以下のようなparameterを持ってリクエストを投げる必要があります
# put method { id: 1, name: "taro", age: 15, club: "baseball" }
また、putメソッドはその名の通り新しいリソースを丸っとそこに「置く」イメージです
もしid:1のリソースが登録されていなければ新しくid:1のリソースを置く、つまり新規作成します
patchの場合
次にpatchメソッドを使ってリソースの更新を行います
patchはリソースの部分的な修正と言いました
先ほどのputと違い、patchでは更新したい属性のみparameterとしてもってリクエストを送れば更新が可能です
patchメソッドを使った更新は以下のようになります
# patch method { club: "baseball" }
また、patchは一部の属性しか持っていないのでputのように新しくリソースを作ることはできません
あくまで存在しているリソースの修正のみ可能です
普段railsを使っているとあまり意識せずに使えてしまっていましたが
こんな違いがあったんですね