본문 바로가기
Etc

REST 성숙도 모델

by 당리 2024. 2. 28.

Richardson Maturity Model

 

REST API를 작성할 때는 몇 가지 지켜야 할 규칙들이 있다. 로이 필딩이 논문에서 제시한 REST 방법론을 보다 더 실용적으로 적용하기 위해 리차드슨은 REST API를 잘 적용하기 위한 4단계 모델을 만들었다.

이를 리차드슨의 REST 성숙도 모델이라 한다.

 

그러나 실제로 3단계인 HATEOAS 원칙을 주순하기는 어려우므로 2단계까지만 적용해도 좋은 API디자인이라고 볼 수 있다.

 

1) RMM 0단계

단순히 HTTP 프로토콜을 사용하기만 해도 된다.

이 경우 해당 API를 REST API 라고 할 순 없다.

 

더보기

예약가능시간 확인 API

POST  /appointment HTTP 1.1

{

 "date" :"20240810",

 "emp" : "이상현" 

}

 

2) RMM 1단계

1단계에서는 개별리소스 개념이 적용되며 모든리소스는 개별리소스에 맞는 엔드포인트를 적용해야된다.

 

더보기

예약가능시간 확인 API

POST  /appointment/20000220 HTTP 1.1

{

 "date" :"20240810",

}

 

HTTP/1.1 200 OK

{

    "slots" : [ {"id":"1523", "emp":"이상현",......} ]

}

더보기

예약하기 API

POST  /slots/1523 HTTP 1.1

{

"customer" : "홍길동"

}

 

 

3) RMM 2단계

CRUD에 맞게 적절한 HTTP메서드를 사용하는 것에 중점을 둔다.

더보기

HTTP 메서드 사용 규칙

GET : 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다. GET 메서드는 지정된 리소스의 표현을 요청한다.

POST : 요청마다 새로운 리소스를 생성해야 한다. 주로 데이터 등록에 사용한다.

PUT : 같은 리소스를 반환해야 하며, 없으면 새롭게 생성한다. (멱등성)

PATCH : 리소스의 수정(부분 변경) 용도로 사용해야 한다.

HEAD : GET 요청과 동일한 응답을 요청하나 응답 시 body를 포함하지 않는다.

DELETE : 지정된 리소스를 삭제한다.

CONNECT : 리소스에 의해 식별된 서버에 대한 터널을 설정한다.

OPTIONS : 리소스에 대한 통신 옵션을 설명한다.

TRACE : 리소스에 대한 경로를 따라 메시지 루프백(loop-back) 테스트를 수행한다.

2단계까지만 적용해도 대체로 잘 작성된 API라고 여긴다.

3단계까지 무조건 적용해야 하는것은 아니다.

 

 

 

4) RMM 3단계

HATEOAS(Hypertext As The Engine Of Application State)라고 불리는 하이퍼미디어 컨트롤을 적용한다.

3단계는 2단계와 동일하지만 리소스를 포함한 링크요소를 삽입해야 한다.

 

HATEOAS를 사용하여 얻게 되는 가장 큰 장점은 서버와 클라이언트를 분리한다는 것이다.

클라이언트는 서버의 행동을 알 필요가 없으며,

서버 측의 변경에도 클라이언트에선 일일이 대응하지 않아도 된다.

더보기

예약일정확인 API

GET  /appointment/20000220/slots?data=20240228 HTTP 1.1

 

 

HTTP /1.1 200 OK

{

   "slots":[

      {"id":"1523" emp :"이상현"..........}

   ]

   "links": {

      "appointment": {

         "href" : "http://localhost:8000/sloats/1523",

         "method" : "POST"

      }

   }

}

이상현이라는 직원의 예약가능시간을 확인한 후 그시간대에 예약하는링크를 삽입했다.

이렇게 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심이다.

 

 

 

'Etc' 카테고리의 다른 글

Design Pattern - Builder  (0) 2024.03.31
WebRTC란?  (1) 2024.03.31
[클라우드 서비스 종류] - XaaS(서비스형 시스템) : IaaS/PaaS/SaaS  (1) 2024.03.25
변수명 짓기가 귀찮다면  (1) 2024.03.20
인텔리제이로 Copilot 사용하기  (2) 2024.03.06