본문 바로가기
RESTful API

HTTP 메서드 측면에서의 API 작업 정의

by 혀닙 2023. 3. 13.

 

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

댓글