해당 포스트는 인프런 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 기반으로 작성되었습니다. 👍
리소스를 등록, 수정, 조회 하는걸 써놓는게 아니다.
무슨 리소스를 쓰냐만 써놔라.
❌/create-members
❌, ⭕/members
⭕
+) 계층 구조상 상위를 컬렉션으로 보고 복수단어 사용을 권장한다.(member → members)
URI - 리소스
HTTP 메소드 - 행위(CRUD)
query
(쿼리 파라미터, 쿼리 스트링) 통해 전달body
로 전달할 수 있지만 지원하지 않는 곳이 더 많음 (권장 X)@RequestParam
: URI에 전송 데이터(query) 노출⭕query로 보내고, 조회한 데이터를 받음
body
를 통해 전달@RequestBody
: URI에 전송 데이터 노출❌body로 보내고, 신규 리소스 생성시 신규 자원 URI 경로를 받음
POST는 body를 통해 들어온 데이터를 처리하는 모든 기능 수행
따라서, ⭐요청 데이터를 어떻게 처리할 지 리소스마다 따로 정해주어야 함⭐
(예: HTML FORM 입력 정보로 회원가입, 게시판 글쓰기, 새 리소스 생성, 기존 자원에 데이터 추가)
단순히 데이터를 생성하거나 변경하는 것을 넘어서 프로세스 처리(프로세스 상태 변경 등)에도 사용
=POST는 만능
,애매하면 POST..!
body
를 통해 수정할 데이터 전송클라이언트가 리소스 위치를 URI에 지정하여서, 해당 위치에 값이 있으면 대체, 없으면 생성
(= POST와의 차이점, POST는 위치를 지정해서 보내지 않음)
body
를 통해 수정할 데이터 전송이미지 출처: 위키피디아, HTTP
GET
: 조회했다고 리소스가 변하지 않는다.
GET
: 여러 번 조회해도 늘 같은 결과 반환한다.
PUT
: 여러 번 덮어씌워도 늘 같은 결과의 리소스가 남는다.
DELETE
: 여러 번 삭제해도 삭제되었다는 같은 결과가 남는다.
❌ POST
: 여러 번 호출하면 같은 회원이 여러 번 등록되거나, 같은 결제가 여러 번 발생할 수도!!!(POST는 리소스 위치를 지정하지 않고 보낸다는 점..!)
GET
, HEAD
, POST
, PATCH
가 캐시 가능하지만GET
, HEAD
정도만 캐시로 사용, 그 중에서도 GET
위주GET
, HEAD
는 조회하는 URI만 캐시 키로 활용하기 때문에 비교적 간단한데,POST
와 PATCH
는 발송한 본문(body)까지 캐시 키로 고려해야하기 때문에 구현이 쉽지 않다고 한다!