0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的な備忘録:HTTPメソッド「PUT」と「PATCH」の違いを記事として整理し、アウトプットしてみた

Last updated at Posted at 2025-01-27

はじめに

PUT と PATCH はどちらもHTTPプロトコルのメソッドで、リソースを更新するために使用されますが、その動作に違いがあります。

特にAPI設計を行う際、どちらを選ぶべきかを理解しておくことが重要だと感じたためです。

なお、本記事は個人的な備忘録としてまとめたものです。その点をご理解いただければ幸いです。

書こうと思ったきっかけ

受講しているITスクールのハッカソン活動において、バックエンド担当の方がAPI設計を行っていました。

その中で、基本的なHTTPメソッドについては理解できていたものの、PUT と PATCH の違いがよく分からず、混乱する自分がいました。

そこで、自分の頭の中を整理するため、さらに同じような疑問を抱える方の参考になればと思い、今回記事としてまとめてみました。

まず、簡単な違いとどちらを使うべきか?

  • PUT を使用するのは、リソース全体を明示的に置き換えたい場合。
  • PATCH を使用するのは、リソースの一部だけを更新したい場合。

1. PUT: リソースの完全置換

  • 動作

    • リソース全体を置き換えます。
    • クライアントが送信するデータがリソース全体の状態を表します。
    • 送信しないフィールドはサーバー上で削除されます。
  • 特徴

    • 冪等性: 同じリクエストを何回送っても結果が変わりません。
    • 主にリソース全体を更新、または作成(リソースが存在しない場合)する際に使用されます。

PUT /users/123
{
  "name": "Alice",
  "age": 30,
  "email": "alice@example.com"
}

上記のリクエストでは、123のユーザーリソース全体がこのデータで置き換えられます。

2. PATCH: リソースの部分更新

  • 動作

    • リソースの一部だけを更新します。
    • クライアントは更新するフィールドだけを送信します。
    • 送信しないフィールドはサーバー上でそのまま保持されます。
  • 特徴

    • 部分更新に適しています。
    • 冪等性: 通常期待されますが、API設計によって異なる場合があります。

PATCH /users/123
{
  "email": "alice.new@example.com"
}

上記のリクエストでは、123のユーザーのメールアドレスだけが更新されます。他のフィールド(nameage など)は変更されず、そのまま保持されます。

PUTとPATCHの主な違い

PUTとPATCHの違いを、自分なりに簡単な表にまとめました。必要に応じて参考にしてください。

特徴 PUT PATCH
更新対象 リソース全体の置換 リソースの部分更新
冪等性 あり(複数回実行しても結果が変わらない) あり(通常は冪等性が期待される)
データ量 全データを送信 必要な部分だけ送信
用途 リソース全体の更新や新規作成 リソースの一部だけ変更

まとめ

PUTはリソース全体を置き換える際に使用し、PATCHはリソースの一部を更新する場合に適しています。

PUTは全データを送信するのに対し、PATCHは必要な部分のみ送信します。

今後もこのような基本的な内容を丁寧にまとめ、自分の知識としてしっかりと定着させていきたいと思います。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?