ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP Method PUT, PATCH 차이
    카테고리 없음 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 경수
Designed by Tistory.