카테고리 없음
HTTP Method PUT, PATCH 차이
alclssha
2023. 5. 30. 00:31
HTTP PUT 메서드
- 요청 페이로드를 사용해 새로운 리소스를 생성
- 대상 리소스를 나타내는 데이터를 대체
HTTP PATCH 메서드
- 리소스의 부분적인 수정을 할 때 사용
PUT, PATCH 차이점
- update 방식의 차이
- 요청한 URI에 자원이 존재하지 않을때 입력
- 멱등성의 관점
해당 테이블이 존재한다고 가정하고 차이점을 알아보자
id | score | name |
1 | 40 | 철수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
update방식의 차이
- id가 1인 사람에게 두가지의 PUT 요청을 보냄
PUT /student?id=1
{
"name" : "창수"
}
PUT /student?id=1
{
"name" : "창수",
"score" : "100"
}
name만 바꾸기 위해 PUT 메서드로 요청을 보내면 전체 데이터를 대체하기 때문에 보내지 않은 값은 null로 대체됨
id | score | name |
1 | null | 창수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
전체 데이터를 PUT 메서드로 요청을 보내면 전체 데이터가 대체됨
id | score | name |
1 | 100 | 창수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
- id가 1인 사람에게 두가지의 PATCH요청을 보냄
PATCH /student?id=1
{
"name" : "창수"
}
PATCH /student?id=1
{
"name" : "창수",
"score" : "100"
}
name만 바꾸기 위해 PUT 메서드로 요청을 보내면 보낸 데이터만 바뀌게 되고, 나머지 데이터는 변동이 없음
id | score | name |
1 | 40 | 창수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
전체 데이터를 PUT 메서드로 요청을 보내면 전체 데이터로 변동된다.
id | score | name |
1 | 100 | 창수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
요청한 URI에 자원이 존재하지 않을때 입력
- id가 6인 데이터를 PUT으로 요청을 보냄
PUT /student?id=6
{
"name" : "하나",
"score" : "0"
}
PUT요청은 id가 6인 새로운 자원을 생성해줌
id | score | name |
1 | 40 | 철수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
6 | 0 | 하나 |
- id가 6인 데이터를 PATCH로 요청을 보냄
PATCH /student?id=6
{
"name" : "하나",
"score" : "0"
}
PATCH요청은 새로운 자원을 생성하지 않고 오류를 반환함
id | score | name |
1 | 40 | 철수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
멱등성의 관점
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고,
서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말함
- 기존의 데이터와 같은 PUT요청
PUT /student?id=1
{
"name" : "철수",
"score" : "40"
}
PUT요청으로 동일한 요청을 여러번 보내더라도 항상 같은 데이터로 대체되기 때문에 멱등성을 가짐
id | score | name |
1 | 40 | 철수 |
2 | 60 | 영희 |
3 | 80 | 경수 |
- 데이터가 아닌 동작을 PATCH로 요청
- PATCH는 HTTP 스펙상 구현 방법에 제한이 없음
- 요청 Body에 꼭 수정해야하는 데이터가 있을 필요가 없음 -> 데이터가 아닌 동작 지정 가능
- PATCH는 HTTP 스펙상 구현 방법에 제한이 없음
PATCH /student?id=1
{
socre: {
type: $inc,
value: 1
}
}
PATCH 요청으로 Body에 동작을 담음으로써 동일한 요청을 여러번 보내면 값이 계속 바뀌므로 멱등성을 가지지 않음
id | score | name |
1 | 41 | 철수 |
2 | 60 | 영희 |
3 | 80 | 경수 |