HTTP 메소드
HTTP API 만들기 (가상)
00. 요구 사항
- 회원 목록 조회
- 회원 조회
- 회원 등록
- 회원 수정
- 회원 삭제
01. URI 설계
- 리소스 식별이 가장 중요 (URI 설계의 기준)
- 위의 요구 사항 중 회원이 리소스
- URI는 계층 구조 => 상위를 컬렉션으로 보고 복수단어 사용 권장 (member -> members)
- 리소스와 행위를 분리해라
- URI는 리소스만 식별
- 리소스는 명사, 행위는 동사
- 행위의 구분은 HTTP 메소드가 대신 해준다!
HTTP 메소드 종류
- 주요 메소드
- GET : 리소스 조회
- POST : 요청 데이터 처리 (주로 등록)
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
- 기타 메소드
- HEAD : GET과 동일하지만 메세지(바디) 부분을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명 (CORS에서 사용)
- CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE : 대상 리소스에 대한 경로를 따라 메세지 루프백 테스트 수행
GET
- 리소스 조회
- query를 통해서 서버에 전달
- 메세지 바디를 사용해서 데이터 전달 가능 => 권장하지 X
POST
- 대상 리소스가 리소스 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청하는 메소드
- 요청 데이터 처리, 신규 리소스 등록, 프로세스 처리에 주로 사용
- 메세지 바디를 통해 클라이언트에서 서버로 요청 데이터 전달
- 서버에서 받은 요청 데이터 처리 (메세지 바디를 통해 들어온 데이터 처리에 관한 모든 기능 수행)
- 리소스 단위 만으로 URI를 꾸리지 못하는 경우가 있음 => 어쩔 수없이 컨트롤 URI 사용
- 다른 메소드로 처리하기 애매하면 그냥 POST 사용
PUT
- 리소스를 대체
- 덮어쓰기와 유사
- 있으면 대채
- 없으면 생성
- 완전 대체 => 단순 수정이 아니라 기존 데이터를 새 데이터로 갈아치움
- 클라이언트가 리소스를 식별
- 클라이언트가 구체적인 리소스의 위치를 다 알고 URI를 지정 (POST와의 차이점)
PATCH
- 리소스 부분 변경
- 데이터 필드를 부분적으로 변경할 수 있음 (PUT은 이게 안돼)
- 간혹 지원이 안 되는 경우가 있음 => POST로 대체
DELETE
HTTP 메소드의 속성
- 안전
- 멱등 (Idempotent)
- 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같음
- GET PUT DELETE
- POST는 멱등이 아님!!!
- 자동 복구 매커니즘
- 캐시 가능
- 응답 결과 리소스를 캐시해서 사용할 수 있나?
- GET HEAD POST PATCH
- 실제로는 GET HEAD 정도만 캐시로 사용 (나머지 두개는 구현이 어려움)
인프런 - 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 정리한 내용입니다.
김영한님 인프런 강의
댓글남기기