REST API, CRUD만 되면 다냐?! : REST 성숙도 모델

Heihei·2022년 12월 12일
0

web-기본 개념 학습

목록 보기
1/2

❗️ 좋은 REST API를 작성해야 하는 이유

  • 어떤 식당이나 카페를 방문했을 때, 식사 혹은 음료를 주문해야 하는데 메뉴판의 상태가 위의 이미지와 같다면, 알아보기도 어렵고 주문하기도 힘듦
  • 클라이언트와 서버 사이에도 데이터와 리소스를 요청하고 요청에 따른 응답을 전달하기 위한 메뉴판이 필요함
  • 이 메뉴판을 보고 클라이언트는 식당에서 식사를 주문하듯 서버에 요청하고, 이에 대한 응답을 메뉴판에 있는 사진이나 음식에 대한 설명처럼 다시 서버에서 클라이언트로 전송하게 됨
  • 따라서 HTTP 프로토콜 기반으로 요청과 응답에 따라 리소스를 주고받기 위해서는 알아보기 쉽고 잘 작성된 메뉴판이 필요한데, 이 역할을 API가 수행해야 하므로 서로 잘 알아볼 수 있도록 작성하는 것이 중요함

✅ 좋은 REST API를 디자인 하는 방법

레오나르드 리차드슨의 REST 성숙도 모델

🏛 REST 성숙도 모델 - 0단계

  • REST 성숙도 모델에 따르면, 0단계에서는 단순히 HTTP 프로토콜을 사용하기만 해도 됨
  • 이 경우, REST API라고 볼 수 없지만 0단계는 좋은 REST API를 작성하기 위한 기본 단계임

예시

🏛 REST 성숙도 모델 - 1단계

  • 1단계에서는 개별 리소스와의 통신을 준수해야 함
  • 모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 함
  • 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 함

예시

  • 어떤 리소스를 변화시키는지 혹은 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용하기 때문에, 적절한 엔드포인트를 작성하는 것이 중요함

  • 엔드포인트 작성 시에는 동사, HTTP 메소드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직한 방법

  • ❗️요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야 함

성공/실패 여부 예시

🏛 REST 성숙도 모델 - 2단계

  • REST 성숙도 모델 2단계에서는 CRUD에 맞게 적절한 HTTP 메소드를 사용하는 것에 중점을 둠
  • HTTP 메소드에 따라 응답코드도 명확하게 작성해야함
  • 클라이언트가 Location 헤더에 작성된 URI를 통해 확인 할 수 있도록 해야, 완벽하게 REST 성숙도 모델의 2단계를 충족한 것이라고 볼 수 있음

예시

메소드 사용 규칙

  • GET : 서버의 데이터를 변화시키지 않는 요청에 사용
  • POST : 요청마다 새로운 리소스를 생성
  • PUT : 요청마다 같은 리소스를 반환
    • 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 함
    • 그렇기 때문에 멱등성을 가지는 메소드 PUT과 그렇지 않은 POST는 구분하여 사용
  • PUT은 교체, PATCH는 수정의 용도로 사용

참고 : MDN HTTP request methods

🏛 REST 성숙도 모델 - 3단계

  • HATEOAS(Hypertext As The Engine Of Application State)라는 약어로 표현되는 하이퍼미디어 컨트롤을 적용
  • 3단계의 요청은 2단계와 동일하지만, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다는 것이 다름

예시

  • 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 중요 포인트
  • 클라이언트 개발자들이 응답에 담겨져 있는 링크들을 눈여겨본다면, 이러한 링크들은 조금 더 쉽고, 효율적으로 리소스와 기능에 접근할 수 있게 하는 트리거가 될 수 있음
profile
모르면 배우면 된다!

0개의 댓글