0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PATCH vs PUT — 部分更新と全体更新、どっち使う?

0
Posted at

はじめに

APIを実装していると、「更新処理って PUT と PATCH どっち使えばいいの?」と迷うことがあります。

なんとなく PUT を使っている人も多いと思いますが、この2つには明確な違いがあります。

結論

  • リソースを丸ごと置き換える → PUT
  • リソースの一部だけ更新する → PATCH

具体例で見る

こんなユーザーリソースがあるとします。

{
  "id": 1,
  "name": "田中太郎",
  "email": "tanaka@example.com",
  "age": 25
}

PUT の場合

PUT は「このリソースを、送ったデータで丸ごと置き換えてください」という意味です。

PUT /users/1
{
  "name": "田中太郎",
  "email": "tanaka-new@example.com",
  "age": 25
}

名前を変えたいだけでも、全フィールドを送る必要があります

もし age を省略して送ったらどうなるか?

{
  "name": "田中太郎",
  "email": "tanaka-new@example.com"
}

PUT の仕様に忠実に従うなら、agenull やデフォルト値にリセットされます。「送らなかった = そのフィールドは不要」と解釈されるからです。

PATCH の場合

PATCH は「送ったフィールドだけ更新してください」という意味です。

PATCH /users/1
{
  "email": "tanaka-new@example.com"
}

これで email だけが更新され、nameage はそのまま残ります。

よくある間違い

「全部 PUT でいいじゃん」パターン

一見シンプルですが、問題があります。

  • フロントが常に全フィールドを把握して送る必要がある
  • 別のユーザーが同時に age を更新していた場合、古い値で上書きしてしまう
  • フィールドが増えるたびにリクエストが肥大化する

「全部 PATCH でいいじゃん」パターン

実務ではこっちに寄りがちですが、PATCH にも注意点はあります。

  • 「送らなかった」と「null を送った」の区別が必要になる
  • リソースの作成・完全な置き換えには意味的に合わない

実務での使い分け

操作 メソッド
リソースの作成または完全な置き換え PUT ユーザー設定の一括保存
リソースの一部更新 PATCH プロフィール画像だけ変更

正直なところ、多くのプロジェクトでは PATCH を中心に使い、PUT はほとんど使わない というケースが多いです。

「名前だけ変えたい」「ステータスだけ更新したい」のように、一部のフィールドだけを更新する場面の方が圧倒的に多いからです。

まとめ

  • PUT = 全体置換。送らなかったフィールドはリセットされる前提
  • PATCH = 部分更新。送ったフィールドだけ変わる
  • 迷ったら、まず その更新は全体を置き換えたいのか、一部を変えたいのか を考える
  • 最も大事なのは、プロジェクト内でルールを統一して文書化すること
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?