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を使っているとあまり意識せずに使えてしまっていましたが

こんな違いがあったんですね