•
PUT 메서드는 새로운 리소스의 모든 것을 수정하지만 PATCH는 부분만 수정한다.
•
PUT은 항상 멱등성을 가지지만, PATCH는 항상 멱등성을 보장하지 않는다.
1. Update 방식
customers
id | name | age |
1 | 마리오 | 10 |
2 | 루이지 | 20 |
리소스의 일부만 새로운 값을 보냈을 때
PUT은 보내지 않은 값은 null로 대체한다 (대상 리소스를 나타내는 데이터를 대체한다)
PUT /customers?id=1
{
name : 데이지
}
JSON
복사
id | name | age |
1 | 데이지 | null |
2 | 루이지 | 20 |
Patch 는 보내지 않은 값은 그대로 유지한다
PATCH /customers?id=1
{
name : 데이지
}
JSON
복사
id | name | age |
1 | 데이지 | 10 |
2 | 루이지 | 20 |
요청한 URI에 자원이 존재하지 않을 때
PUT은 새로운 자원을 생성한다
PUT /customers?id=4
{
name : 와리오,
age: 99999
}
Plain Text
복사
id | name | age |
1 | 마리오 | 10 |
2 | 루이지 | 20 |
4 | 와리오 | 99999 |
PATCH는 새로운 자원을 생성하지 않고, 서버에 오류를 응답으로 보낸다
PATCH /customers?id=4
{
name : 와리오,
age: 99999
}
Plain Text
복사
id | name | age |
1 | 마리오 | 10 |
2 | 루이지 | 20 |
2. 멱등성
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다
PUT은 항상 멱등성을 보장하지만, PATCH는 멱등성을 보장하도록 설계할 수 있지만, 멱등성을 보장하지 않도록 설계할 수도 있다. PUT은 요청에 대하여 리소스를 통째로 바꿔버리기 때문에 멱등성이 보장되지만, PATCH는 리소스의 일부에 대하여 변화를 명령할 수 있기 때문이다.
멱등인 PATCH
PATCH /customers?id=1
{
age = 100
}
Plain Text
복사
id | name | age |
1 | 마리오 | 100 |
2 | 루이지 | 20 |
멱등이 아닌 PATCH
나이를 변경하는 기능이 있고, 한번 호출할 때 마다 나이를 10 더하는 식으로 변경 할 수 있다고 가정
PATCH /customers?id=1
{
"operation": "add",
"age": 10"}
}
JSON
복사
customers
id | name | age |
1 | 마리오 | 10 |
2 | 루이지 | 20 |
첫번째
id | name | age |
1 | 마리오 | 20 |
2 | 루이지 | 20 |
두번째
id | name | age |
1 | 마리오 | 30 |
2 | 루이지 | 20 |
같은 요청을 보냈지만 요청할 때마다 반환되는 값이 변하기 때문에 해당 PATCH는 멱등성을 가지고 있지 않다.
참고: