- REST 성숙도 모델
레오나르드 리차드슨(Leonard Richardson)은 REST API를 잘 적용하기 위해 총 4단계(0~3단계) 모델을 정의했다.
REST API를 발표한 로이 필딩은 모든 단계를 충족해야 REST API라고 부를 수 있다고 했다. 하지만 3단계까지 지키기 어렵기 때문에 2단계까지만이라도 좋은 API 디자인이라고 볼 수 있고 이를 HTTP API라고 부른다.
HTTP API : 2단계까지 준수
REST API : 모든 단계 준수
HTTP 프로토콜 사용
개별 리소스(Resource) 추가
요청을 단일 서비스 endpoint로 보내는 것이 아니라, 개별 리소스로 통신한다.
예를 들어 /movies
로 모든 요청을 전달하는 것보다, /posts/1
과 같이 posts라는 리소스를 만들어 1번 게시글이라는 리소스를 이해할 수 있도록 URI를 설계한다
많은 URI를 사용하지만 단일 HTTP Verb(일반적으로 POST)만 사용.
이는 시스템에서 사용 가능한 각 리소스에 고유한 URI를 제공한다. 고유한 URI는 하나의 고유한 리소스를 개별적으로 식별하므로 이러한 서비스가 0단계보다 우수하다.
개별 리소스에 맞는 Endpoint를 사용
요청에 맞는 정보를 응답으로 전달해야한다
Endpoint 작성
- 동사 단어, HTTP 메서드, 어떤 행위에 대한 단어 지양한다
- 리소스에 집중한 명사 단어가 바람직하다
URI Resources + HTTP Method(CRUD에 적합하게 작성)
GET /posts/1/comments?from=20220424&to=20221027
- 멱등(idempotent)하다 : 매 요청마다 같은 리소스를 반환하는 특징
그렇기 때문에 멱등성을 가지는 PUT과 그렇지 않은 POST는 구분해야 한다.
PATCH는 멱등이거나 멱등이 아니게 설계할 수도 있다.
- PATCH 메서드가 멱등인 경우
글 title만 변경하는 api의 경우, 중복 요청에도 서버 상태는 동일하므로 멱등성이 있다.- PATCH 메서드가 멱등이 아닌 경우
1번째요청 {views : 0 + 1} => 1번응답 {views : 1}
2번째요청 {views : 0 + 1} => 2번응답할 때
{views : 1}이 아니라 서버에서 {views : 2}로 증가, 변경시켰다면 멱등이 아니다.
위 글 조회수 증가 api 경우, 여러번 요청을 하게 되면 매번 증가된 다른 결과(조회수)가 나오므로 멱등이 아닌 경우에 해당한다.
멱등이게 하려면 여러번 요청해도 항상 같은 {views : 1}이 나와야 한다.
3단계까지 적용한 경우는 드물다. 무조건적으로 준수해야하는 것은 아니며, 2단계까지 적용한 것을 HTTP API라고 부른다.
URI + HTTP Method + HATEOAS
- HATEOAS(Hypertext As The Engine Of Application State)
: 애플리케이션의 상태는 Hypertext를 이용해 전이돼야 한다
클라이언트가 요청하고 응답받은 후, 다음 단계로 할 수 있는 작업(전이)을 알려주는 것이다.
서버는 다음 단계 작업을 위한 URI를 포함한 링크요소를 제공한다. 이를 제공하면 클라이언트는 다음 단계에 대한 행위를 클라이언트에서 관여하지 않고 서버에 응답으로서 작업을 정의할 수 있게 된다.
- 링크 요소
응답을 받은 다음에 하는 다양한 작업들을 위한 링크를 포함한다. 응답 내에 새로운 링크를 넣어서 새로운 기능에 접근할 수 있도록 한다.
예) 의사의 예약 가능 시간 확인 후
=> 해당 시간대 예약할 수 있는 링크 삽입, 예약 확인 링크 삽입
누구나 사용 가능한 API다. 무제한 이용은 아니고, 이용 수칙과 가격, 정보 제한 등에 따라 제한 사항이 있을 수 있다.
날씨 API로는 대표적으로 Open Weather Map이 있다.
정부에서 제공하는 공공데이터가 있는데 공공데이터 사이트에서 검색하면 관련된 오픈 API를 찾을 수 있다.
구글 REST API 작성 가이드라인
마이크로소프트 REST API 작성 가이드라인
원문 링크 - Richardson Maturity Model - 마틴파울러
국문 번역 링크 - [한글화 프로젝트] 1. Richardson 성숙도 모델(Richardson Maturity Model) - 지앤선의 책 사랑:티스토리
REST API 튜토리얼: Richardson 성숙도 모델
마틴 파울러 선생님 사이트?? 구경하다가
레오나르드 리차드슨 선생님 사이트도 발견함 ㅋㅋㅋㅋㅋ
마틴 파울러 사이트 - https://martinfowler.com/
레오나르드 리차드슨 사이트 - https://www.crummy.com/