-
(HTTP) 10 - HTTP 메서드 (GET, POST, PUT, PATCH, DELETE)개발/HTTP 2024. 10. 31. 10:56
■ API URI 고민
중요한 것은 리소스 식별이다.
* 리소스란?
- 회원 등록, 수정, 조회가 리소스가 아님
- 회원이라는 개념 자체가 리소스
* 리소스 식별 방법
- 회원 등록하고 수정 조회하는 것을 모두 배제
- 회원이라는 리소스만 식별하면 된다 -> 회원 리소스를 URI 에 매핑
리소스만 가지고 URI 를 만들면 모두 URI 가 동일하게 만들어진다.
구분 방법이 필요해진다.
- 리소스와 행위를 분리해야 한다.
- URI 는 리소스만 식별
- 리소스와 해당 리소스를 대상으로 하는 행위를 분리한다.
ex) 리소스 : 회원
행위 : 조회, 등록, 삭제, 변경
- 리소스는 명사, 행위는 동사
■ HTTP 메서드 종류
* 주요 메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스 대체, 해당 리소스가 없으면 생성
ex) 폴더에 파일 넣는 것과 비슷
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
* 기타 메서드
- HEAD : GET 과 동일하지만 메시지 부분을 제외하고, 상태줄과 헤더만 반환
- OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명 (주로 CORS 에서 사용)
- CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정 -> 거의 사용X
- TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행 -> 거의 사용X
■ GET
- 서버에 전달하고 싶은 데이터는 query 를 통해 전달
- 메시지 바디에 담을 수 있지만 권장하지 않음
■ POST
- 메서지 바디를 통해 서버로 요청 데이터 전달
- 등록에 주로 많이 사용
201 Created : 신규 자원 생성 시 보통 사용
Location : 자원이 생성된 URI 경로
- HTML FORM 에 있는 데이터 처리 시 사용
- 게시판 글쓰기
- 서버가 아직 식별하지 않은 새 리소스 생성
ex) 신규 주문 생성
- 기존 자원에 데이터 추가
- 리소스 URI 에 POST 요청이 오면 요청 데이터를 어떻게 처리할 지 리소스마다 따로 정해야 함
-> 정해진 것이 없음.
■ POST 정리
1. 새 리소스 생성(등록)
2. 요청 데이터 처리
- 단순 데이터 생성, 변경이 아니라 프로세스 처리해야 하는 경우
- POST 결과 새로운 리소스 결과가 생성되지 않을 수도 있다.
- 컨트롤 URI(동사 URI) 가 필요한 경우 -> 모든 것을 리소스만으로 URI 만드는 데 한계 있다.
3. 다른 메서드로 처리하기 애매한 경우
- JSON 조회 데이터 넘겨야 하는데 GET 메서드 사용하기 어려운 경우
※ GET 메서드는 메시지 바디 지원 안하는 곳 많기 때문에
조회 데이터 최대 GET, 데이터 변경, 프로세스 처리 등 POST 사용 권장
■ PUT
- 리소스 대체
- 폴더 안에 파일 복사하는 것과 비슷
- 리소스가 있으면 대체 없으면 생성 (덮어쓰기)
- 클라이언트가 리소스를 식별 (전체 경로를 알고 있다.)
- 클라이언트가 리소스 위치를 알고 URI 지정
- POST 차이
리소스가 있다면 리소스를 대체하게 된다.
그러나 PUT 은 만약 변경하고 싶은 내용이 age 에 대한 내용이여서 그 내용만 보내면
완전 대체를 하기 때문에 이전의 username 필드가 삭제가 돼 버린다. (덮어쓰기)
■ PATCH
리소스 부분 변경을 원한다면 PATCH 를 사용하면 된다.
■ DELETE
만약 PATCH 를 지원하지 않는데 부분 변경이 필요하다면 POST 를 사용하면 된다.
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
'개발 > HTTP' 카테고리의 다른 글
(HTTP) 12 - HTTP 메서드 활용 (0) 2024.10.31 (HTTP) 11 - HTTP 메서드 속성 (안전, 멱등, 캐시가능) (0) 2024.10.31 (HTTP) 9 - HTTP 메시지 (0) 2024.10.31 (HTTP) 8 - connectionless (비연결성) (2) 2024.10.31 (HTTP) 7 - Stateful(상태 유지), Stateless(무상태) (0) 2024.10.31