카테고리 없음

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 /student?id=1
{
  socre: {
    type: $inc,
    value: 1
  }
}

 

PATCH 요청으로 Body에 동작을 담음으로써 동일한 요청을 여러번 보내면 값이 계속 바뀌므로 멱등성을 가지지 않음

id score name
1 41 철수
2 60 영희
3 80 경수