HTTP 메서드 측면에서의 API 작업 정의
- HTTP 프로토콜은 요청에 체계의미를 할당하는 다양한 메서드를 정의하고 있음
일반적인 HTTP 메서드
메서드 | 내용 | 응답 메세지의 본문 |
---|---|---|
GET | 지정된 URI에서 Resource의 Representation을 검색 | 요청된 Resource의 세부 정보 |
POST | 지정된 URI에 새로운 Resouce를 생성 Resource를 생성하지 않는 작업을 수행할 수도 있음 |
새 Resource의 새부 정보를 제공 |
PUT | 지정된 URI에 Resource를 생성하거나 대체 | 만들 또는 업데이트할 Resource를 지정 |
PATCH | 지정된 URI에서 Resource의 부분 업데이트 수행 | Resource에 적용할 변경 내용을 지정 |
DELETE | 지정된 URI의 Resource를 제거 |
특정 요청의 효과
- Resource가 컬렉션인지, 개별 항목인지에 따라 달라짐
- 전자 상거래 예시를 통한 RESTful 구현의 일반 규칙 요약
Resource | POST | GET | PUT | DELETE |
---|---|---|---|---|
/customers | 새 고객 생성 | 모든 고객 검색 | 고객 대량 업데이트 | 모든 고객 제거 |
/customers/1 | Error | 고객 1에 대한 세부 정보 검색 | 고객 1이 있는 경우 고객 1의 세부 정보 업데이트 | 고객 1제거 |
/customers/1/orders | 고객 1에 대한 새 주문 생성 | 고객 1에 대한 모든 주문 검색 | 고객 1의 주문 대량 업데이트 | 고객 1의 모든 주문 제거 |
POST, PUT, PATCH의 차이점
POST
- Resource 생성
- 서버는 새 Resource에 대한 URI를 할당하고 클라이언트에 해당 URI를 반환함
- REST 모델에서는 _컬렉션_에 POST 요청을 자주 적용함
- 새 Resource가 컬렉션에 추가 됨
- 새 Resource를 만들지 않고 기존 Resource에 처리할 데이터를 보내는 데 사용할 수도 있음
PUT
- Resource 생성 또는 기존 Resource 대체
- 클라이언트는 Resource의 URI를 지정
- 요청 본문에는 Resource의 완전한 Representation이 포함됨
- 해당 URI를 사용하는 Resource가 이미 있는 경우 Resource가 대체됨
- 해당 URI를 사용하는 Resource가 없고, 서버에서 Resource 생성을 지원하는 경우 새로운 Resource 생성
- PUT 요청은 컬렉션 보다는 특정 고객 같은 _개별 항목_인 Resource에 자주 적용됨
- 서버에서 PUT을 통한 업데이트를 지원하지만, 생성은 지원하지 않는 경우도 있음
- PUT을 통한 생성 지원 여부는 Resource 존재 이전에 클라이언트가 의미있는 방법으로 Resource에 URI를 할당할 수 있는 지 여부에 따라 결정됨
- 할당 불가능한 경우 POST를 사용하여 Resource를 생성하고 PUT/PATCh를 통해 업데이트 함
PATCH
- 기존 Resource에 부분 업데이트
- 클라이언트는 Resource의 URI를 지정하며, 요청 본문에 Resource에 적용할 변경 내용을 담아서 보냄
- 클라이언트는 Resource의 전체 Respresentation이 아닌 변경 내용만 보냄
- PUT 사용보다 효율적일 수 있음
- 서버에서 Resource 생성을 지원하는 경우 기술적으로 새 Resource 생성 가능
- 단, null Resource에 대한 업데이트를 지정
멱등 법칙 / 멱등성 (idempotent)
- 멱등 법칙 / 멱등성이란?
- 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미
- PUT 요청은 idempotent여야 함
- 즉, 클라이언트가 동일한 PUT 요청을 여러번 제출하는 경우 그 결과가 항상 같아야 함
- 같은 값을 사용하여 같은 Resource가 수정되기 때문
- POST나 PATCH 요청은 반드시 idempotent가 된다는 보장을 할 수 없음
'RESTful API' 카테고리의 다른 글
HTTP 의미 체계 준수 (0) | 2023.03.13 |
---|---|
RESTful Web 디자인 (0) | 2023.03.12 |
댓글