Ruby on RailsにおけるPUTとPATCHの話

Ruby on Railsではリソースの更新にPATCHが使われている。HTTPの更新メソッドであるPUTとPATCHの違いを整理する。

用語

  • 羃等 (idempotence): ある操作を何回行っても結果が同じこと
  • 安全 (safe): 操作対象のリソースの状態を変化させないこと

PUTとPATCHの違い

PUTは羃等であるため、完全なリソースの情報をリクエストに含める必要がある。PATCHは羃等でないため、リソースの部分的な情報が含まれていればよい。

Admin権限を持つユーザモデルで考える。あるユーザのAdmin権限を有効にしたい場合、PUT /users/:idadmin の値を変更するのは適切ではない。PUTはリソースの部分的な更新ではなくリソース全体を更新するメソッドなので、PUT /users/:id/admin とすべきである。

リソースに対して部分的な更新を行なうのがPATCHメソッドである。今回の例だと、PATCH /users/:idadmin の値のみを更新することができる。

Ruby on Railsではリソースを完全に置換することは稀なので、部分的な更新をするPATCHがデフォルトになった。

参考