자원(resource)을 조회 (데이터를 가져올 때만 주로 사용)
Server 에 전달할 데이터를 query(쿼리 파라미터 등)를 통해 전달
+a) GET 예시
GET /search?q=test1&hl=test2 HTTP/1.1
위와 같이 /search 라는 resource 경로 뒤에 q, hl 같이 key에 value 형태로 데이터를 전송하는 데 이 때 q=test1&hl=test2
해당 문자열이 쿼리 파라미터
Server 에서는 해당 resource 뒤에 붙은 각 데이터의 key를 통해 value를 꺼내볼 수 있음
이런 쿼리 파라미터 방식은 URI에 정보가 모두 노출되어 보안에 취약함, 그래서 보통 파라미터 방식에서는 보안에 민감하지 않은 내용을 담음
Server로 데이터를 전송 (새로운 resource 생성(등록) 시 사용)
ex1) 회원가입을 통해 새로운 사용자 추가
ex2) 게시판 시스템에 글 올리기
사실 데이터 등록(생성) 뿐만 아니라 데이터 처리 관련 모든 프로세스를 POST로 가능
따라서 새로운 데이터 등록, 요청 데이터 처리 또는 다른 메서드로 처리하기 어려운 경우 POST 사용 가능
POST 예시
POST /members HTTP/1.1 { "username": "hello", "age": 20 }
요청된 데이터를 이용해 새로운 resource 생성 또는 해당 resource의 데이터를 요청된 데이터로 완전히 대체 (덮어쓰기)
클라이언트가 요청 시 대체할 데이터에 대한 resource를 알고 있고, 이를 URL로 지정
덮어쓰기할 특정 데이터의 위치를 알고 있음!
PUT 예시
PUT /members/100 HTTP/1.1 { "username": "hello", "age": 20 }
resource를 부분적으로 변경
PUT 방식과 달리 요청받은 데이터만 부분적으로 변경
PATCH 예시
PATCH /members/100 HTTP/1.1 { "age": 50 }
'age' : 50
부분만 요청대로 변경함DELETE 예시
DELETE /members/100 HTTP/1.1
메서드 사용 전
유저 조회 : /read-member-by-id
유저 등록 : /create-member
유저 수정 : /update-member
회원 삭제 : /delete-member
메서드 사용 후
회원 조회 : /members/{id} - GET
회원 등록 : /members/{id} - POST
회원 수정 : /members/{id} - PATCH & PUT
회원 삭제 : /members/{id} - DELETE
PUT 으로 요청이 들어왔다고 해서 데이터가 등록되지 않고, DELETE 요청이 들어왔다고 해서 데이터가 삭제되지 않음
각 요청관련 로직은 서버측 개발자가 직접 구현해야 함
결과적으로 굳이 HTTP method 별로 요청을 구별하는 이유는 유지보수성을 위해서임
resource(자원) 과 Method(행위) 를 분리는 곧 유지보수에 유리하며 가독성이 높아짐