LoginSignup
0
0

More than 1 year has passed since last update.

HTTPのPUTとPATCH違い

Last updated at Posted at 2022-08-16

HTTPメソッド中、PUTとPATCHはリソースをUPDATEするとき使用する。同じ機能だと勘違いしやすい2つのリクエストには若干の違いがある。
Mapping Annotationの@PatchMappingで簡単に書いたことがあるがもう一回整理してみる。
PUT:リソースのすべてを更新する。
PATCH:リソースの一部を更新する。


下のようなリソースがあるとする。

id name address gender
1 Kim Seoul M
2 Mari Tokyo F
3 Luis Madrid M

  • PUT
    (1)リソースのすべての項目にUpdateリクエスト
PUT /id/1

{
    name : "Jane",

    address : "NY",

    gender : "F"
}

結果:id1のデータがすべてUpdateされる。

id name address gender
1 Jane NY F
2 Mari Tokyo F
3 Luis Madrid M

 

(2)リソースの一部の項目にUpdateリクエスト

PUT /id/1

{
    address : "LA"

}

結果:リクエストしてない項目もUpdateされるため、id1のnameとgenderはNullになる。

id name address gender
1 LA
2 Mari Tokyo F
3 Luis Madrid M

 

(3)リクエストしたリソースがない時

PUT /id/4

{
    name : "Victoria",

    address : "London",

    gender : "F"
}

結果:以下のように新しいリソースが追加される。

id name address gender
1 Kim Seoul M
2 Mari Tokyo F
3 Luis Madrid M
4 Victoria London F

 


  • PATCH
    (1)リソースのすべての項目にUpdateリクエスト
PATCH /id/1

{
    name : "Jane",

    address : "NY",

    gender : "F"
}

結果:PUTと同じくid1のデータがすべてUpdateされる。

id name address gender
1 Jane NY F
2 Mari Tokyo F
3 Luis Madrid M

 

(2)リソースの一部の項目にUpdateリクエスト

PATCH /id/1

{
    address : "LA"

}

結果:リクエストした項目のみUpdateされるため、id1のnameとgenderは元のデータを維持する。

id name address gender
1 Kim LA M
2 Mari Tokyo F
3 Luis Madrid M

 

(3)リクエストしたリソースがない時

PUT /id/4

{
    name : "Victoria",

    address : "London",

    gender : "F"
}

結果:新しいリソースは追加されない上、ServerはClient ErrorをResponseとして返す。

id name address gender
1 Kim Seoul M
2 Mari Tokyo F
3 Luis Madrid M

 


まとめ

  • PUT:リソースのすべてを更新するため、リクエストしなかった項目もNullとしてUpdateされる。
  • 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