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

혀어어언·2023년 3월 13일
1

RESTful Web design

목록 보기
2/2
  • 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 구현의 일반 규칙 요약

ResourcePOSTGETPUTDELETE
/customers새 고객 생성모든 고객 검색고객 대량 업데이트모든 고객 제거
/customers/1Error고객 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가 된다는 보장을 할 수 없음

Reference:
마이크로 소프트 RESTful 웹 API 디자인 모범 사례

0개의 댓글