HTTP API를 만들어보자
URI의 리소스만 식별해 놓으면 HTTP 메서드가 조회/등록/삭제/변경 의 역할을 대신 해준다.
HTTP 메서드 - GET, POST
GET : 리소스 조회
서버에 전달하고 싶은 query를 통해서 전달
POST : 요청 데이터를 처리, 주로 등록에 사용
클라이언트에서 서버로 데이터를 보낼 때 서버가 받아서 요청데이터를 처리해줘 !!
메시지 바디를 통해 서버로 요청 데이터 전달
PUT : 리소스를 대체, 해당 리소스가 없으면 생성
ex) 파일을 폴더에 넣는것과 비슷함 없으면 폴더에 파일이 새로 생기지만, 기존 파일이 있으면 덮어버리
PATCH : 리소스를 부분적으로 변경
ex) 회원의 이름 변경, 특정 필드 수정
DELETE : 리소스 삭제
HTTP 메서드 - PUT, PATCH, DELETE
PUT: 리소스를 대체, 클라이언트가 리소스를 식별
POST는 100번인지 200번인지 모름
PUT은 100번을 지정해서 저장할 수 있음 => 클라이언트가 리소스 위치를 알고 URI를 지정
PUT은 리소스를 수정하기에는 용이하지 않다, 리소스가 없는 값은 아예 필드를 없애버림
PATCH 로 리소스를 수정, 리소스가 없는 값은 이전 값을 유지함
PUT 은 완전대체
PATCH 는 부분변경
HTTP 메서드의 속성
호출해도 리소스를 변경하지 않는다.
GET, HEAD, OPTIONS, TRACE
한 번 호출하든 두 번 호출하든 100번 호출하는 결과가 똑같다.
GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
PUT: 결과를 대체한다. 따라서 같은 요청을 여러 번 해도 최종 결과는 같다.
DELETE: 결과를 삭제한다. 같은 요청을 여러 번 해도 삭제된 결과는 똑같다.
POST: 멱등이 아니다! 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다.
멱등은 외부 요인으로 인해 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.
GET, HEAD, POST, PATCH 캐시가능
실무에서는 GET만 캐시로 사용한다
=> 캐시를 하려면 키가 맞아야함, POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않다.
Reference
김영한 님 - 모든 개발자를 위한 HTTP 웹 기본 지식