김영한님의 <모든 개발자를 위한 HTTP 웹 기본 지식>을 수강하고 요약한 내용입니다.
API URI 설계
리소스와 행위를 분리
- 회원을 등록, 수정, 조회 → 행위
- 회원 그 자체 → 리소스
- 회원이라는 리소스만 식별하면 된다.
- 회원 리소스를 URI에 매핑
HTTP 메서드
메서드 | 기능 | 서버에 전달하고 싶은 데이터 | 안전 | 멱등 | 캐시 가능 |
GET | - 리소스 조회 | - query 를 통해 전달 - 메시지 body 로 데이터를 전달할 수 있지만, 권장 X |
⭕️ | ⭕️ | ⭕️ |
POST | - 요청 데이터 처리 (주로 리소스 등록) |
- 메시지 body 를 통해 전달 | ❌ | ❌ | ⭕️ |
PUT | - 리소스 완전히 대체, 없으면 생성 (덮어쓰기) |
- 클라이언트가 리소스 위치를 알고 URI 지정 - 메시지 body 를 통해 전달 |
❌ | ⭕️ | ❌ |
PATCH | - 리소스 부분 변경 | - 메시지 body 를 통해 전달 → 이 경우 멱등 O - 덮어쓸 데이터가 아닌 동작을 지정 → 이 경우 멱등 X |
❌ | ❌ | ⭕️ |
DELETE | - 리소스 삭제 | ❌ | ⭕️ | ❌ | |
HEAD | - GET과 동일 - 메시지 부분 제외, 상태 줄 + 헤더 반환 |
⭕️ | ⭕️ | ⭕️ | |
OPTIONS | - 대상 리소스에 대한 통신 가능 옵션 설명 - 주로 CORS에서 사용 |
- 메시지 body 선택 사항 | ⭕️ | ⭕️ | ❌ |
POST
요청 데이터를 어떻게 처리할지는 리소스마다 따로 정해야 한다.
- 새 리소스 생성(등록)
- 요청 데이터 처리
- 단순한 데이터 생성이나 변경이 아니라, 프로세스를 처리해야 하는 경우
- POST 의 결과로 새로운 리소스가 생성되지 않을 수도 있음
ex) 배민 결제 완료 → 배달 시작 → 배달 완료
- 다른 메서드로 처리하기 애매한 경우
HTTP 메서드의 속성
안전
호출해도 리소스를 변경하지 않는다.
💡 안전은 해당 리소스의 변경사항만 고려한다. 외부 장애는 고려 X
멱등
(한 번 호출하든 두 번 호출하든 100번 호출하든) 몇 번 호출하든 결과가 똑같다.
→ 자동 복구 메커니즘 등에 활용 가능 (다시 요청해도 됨)
💡 멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려 X
캐시가능
응답 결과 리소스를 캐시해서 사용해도 되는가?
💡 실제로는 GET, HEAD 정도만 캐시로 사용
→ POST, PATCH는 본문 내용까지 캐시 키로 사용해야 하기 때문
클라이언트에서 서버로 데이터 전송
예시 | 특징 | HTTP 메서드 | |
정적 데이터 조회 | 이미지, 정적 텍스트 문서 |
- query 파라미터 미사용 | GET |
동적 데이터 조회 | 검색, 필터 | - query 파라미터 사용 | GET |
HTML Form 데이터 전송 |
회원가입, 상품 주문 |
- Content-Type: application/x-www-form-urlencoded - Content-Type: multipart/form-data |
POST GET |
HTTP API 데이터 전송 |
서버 to 서버, 웹, 앱 클라이언트 |
- Content-Type: application/json | POST PUT PATCH GET |
Content-Type: application/x-www-form-urlencoded
- form의 내용을 body로 전송
- key=value(POST), query 파라미터(GET) 형식
- 전송 데이터를 URL 인코딩 처리
Content-Type: multipart/form-data
- 다른 종류의 여러 파일과 form의 내용을 함께 전송
- 파일 업로드 같은 바이너리 데이터 전송 시 사용
데이터 조회
문서(Document)
- 단일 개념 (파일 하나, 객체 인스턴스) ex) /members/100
HTTP API - POST vs PUT
컬렉션(Collection)
- 서버가 관리하는 리소스 디렉토리
- 서버가 리소스의 URI를 생성하고 관리
- POST 기반 등록
스토어(Store)
- 클라이언트가 관리하는 리소스 저장소
- 클라이언트가 리소스의 URI를 알고 관리
- PUT 기반 등록
HTTP FORM
컨트롤러(Controller), 컨트롤 URI
- HTML FORM은 GET, POST만 지원
- 이러한 제약을 해결하기 위해 동사로 된 리소스 경로 사용
ex) POST 메서드를 쓰면서 /edit, /delete
'TIL > 네트워크' 카테고리의 다른 글
[240222] HTTP 헤더 (0) | 2024.02.22 |
---|---|
[240219] HTTP 상태코드 (1) | 2024.02.19 |
[240213] HTTP 기초 (0) | 2024.02.13 |
[240210] 주소창에 www.google.com을 입력하면 발생하는 일 (0) | 2024.02.10 |
[240209] URI, URL, URN (1) | 2024.02.09 |