HTTP 메서드 종류별 특징

GET

리소스 조회

  • 서버에 전달하고 싶은 데이터는 query (쿼리 파라미터, 쿼리 스트링) 을 통해 전달함
  • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음.[최근 스펙에서는 허용은 되어있음]
    @GetMapping("/get/test")
    public void getTest(@RequestBody MemberData memberData){
        System.out.println(memberData.getId());
        System.out.println(memberData.getPwd());
    }
curl --location --request GET 'http://localhost/get/test' \
--header 'Content-Type: application/json' \
--data-raw '{
    "id":"1234",
    "pwd":"test"
}'

위에 보이는 Controller 에 GET 요청으로 curl 요청할 경우 Console 에 id:1234 pwd:test 가 정상적으로 메핑되어 들어온다.
하지만 GET 요청으로 데이터를 보낸후 어떤 처리를 서버에 요청하는것은 REST 한 설계와 아직은 맞지 않는듯하다.

POST 와 GET 두 요청다 사실 서버에 조회용으로써 사용이 가능하다 하지만 GET 으로 요청을하였을 때의 장점은 서버간의 규약에 있어 A서버는 하나의 GET 요청이 들어올 경우 캐싱을 하는등과 같은 규약이 있을 수 있다. 모든 요청을 중구 난방으로 POST 로 요청이 들어올 경우 POST 요청을 서버에서 성능을 높이기 위한 어떠한 처리를 하기 애매해질 수 있다.

POST

바디에 담긴 데이터를 등록 또는 어떤 처리를 요청할때 사용함.

  • 서버는 요청 데이터를 처리, FormData 회원가입, 주문생성, 댓글, 글쓰기, 기존 데이터에 신규 자원을 추가하는 일련의 과정을 처리함.
  • 반드시 새로운 리소스가 생성(저장) 한다 보다 데이터를 처리하는것에 초점이 있음
    • 주문 데이터를 여타 다른 벤더사에 REST 요청 처리
    • 데이터 속성에 따라 상태값을 변경할 수 도있음
  • 쿼리 파라미터로 넘기기 애매한경우 POST 를 사용할 수 도있다.

PUT

리소스를 대체, 해당 리소스가 없을 경우 생성 있으면 대체

  • A 라는 맴버가 있을때 A 가 유입되었을경우 없으면 넣고 있으면 유입된 데이터로 완전히 대체해버림
  • 클라이언트가 리소스의 위치를 정확히 알고 지정함
    • url -> /members/100 , order/257892 일 경우 100번 회원에 대한 자원대체 257829 번에 대한 주문건에대한 대체 를 요청함
      클라이언트는 100번 자원이 무엇인지 257892 주문이 무엇인지를 알고있는 상태로 서버에 요청을 보냄
      이것이 POST 와 PUT 의 차이중 하나이다.
  • PUT 요청일경우 하나의 객체에 대해 한가지 프로퍼티만 수정할 수 없다.

위 요청같이 들어온 데이터 그대로 기존 데이터를 완전이 대체함.

PATCH

리소스 부분 변경

  • PUT 요청에서 데에터를 완전히 대체하지 않으면서 업데이트하게됨.
  • 하나의 객체에 대하여 특정 프로퍼티에 대한 업데이트가 가능함.

DELETE

리소스 삭제

  • 특정 리소스를 제거함.

좋은 웹페이지 즐겨찾기