[2022.10.06] REST API, RMM

Reyna·2022년 10월 6일
0

TIL

목록 보기
4/16

REST API

REST API는 REST 제약 조건을 준수하는 API를 뜻한다.

REST(Representational State Transfer)

HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처

HTTP : HTML과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 레이어 프로토콜, 클라이언트-서버 프로토콜이라고도 한다.

API(Application Programming Interface)

API는 클라이언트가 리소스를 잘 활용할 수 있도록 서버가 제공하는 인터페이스를 말한다. 만약 날씨 어플이 날씨를 표시하고 싶다면 기상청 API를 통해 날씨 정보를 받아올 것이다.

여기서 어플리케이션은 소프트웨어를 말하고, 인터페이스는 소프트웨어 간의 요청과 응답, 즉 통신하는 방법을 정의한 계약서나 메뉴판, 혹은 설명서라고 할 수 있다.

Richardson Maturity Model(RMM)

REST API를 작성할 때 지켜야 할 규칙들이 있는데, 이 규칙들을 실용적으로 적용하기 위해 리차드슨이 만든 4단계 모델을 RMM이라고 한다. 이 규칙들을 잘 지킨 시스템을 RESTful하다고 한다.


https://martinfowler.com/articles/richardsonMaturityModel.html

0단계

이 단계에서는 HTTP 프로토콜을 사용하기만 해도 된다. 하지만 REST API라고 할 수는 없고, REST API를 작성하기 위한 기본 단계라고 생각하면 된다.

1단계

1단계에서는 개별 리소스와의 통신을 준수해야 한다.
0단계에서는 모든 리소스가 하나의 동일한 엔드포인트를 가졌는데, 1단계에서는 개별 리소스가 각자 엔드포인트를 가져야 한다는 뜻이다. 이 엔드포인트를 통해 같은 URL이라도 다른
이때 엔드포인트를 동사, HTTP 메서드보다 명사로 작성하는 것이 바람직하다.

엔드포인트는 어떤 리소스의 상태를 변화시키는지를 생각해서 디자인해야 한다.

2단계

2단계에서는 HTTP 메서드를 CRUD(Create, Read, Update and Delete)에 맞게 사용하는 것에 중점을 둔다.

  • GET 메서드 : 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다. body를 사용하지 않으며,
  • POST/PUT 메서드 : POST 메서드는 요청마다 새로운 리소스 생성, PUT 메서드는 요청마다 같은 리소스 반환(멱등성을 가짐)
  • PUT/PATCH 메서드 : PUT은 교체, PATCH는 수정의 용도로 사용
  • GET은 body 대신 query parameter를 사용한다.
  • PATCH도 멱등할 수도 있고 아닐 수도 있다.(만약 PUT 처럼 사용한다면 멱등할 것이다.)

💡 멱등성을 가진다 = 매 요청마다 같은 리소스를 반환한다.

3단계

3단계는 HATEOAS(Hypermedia as the Engine of Application State)라는 하이퍼미디어 컨트롤을 적용한다.
요청은 2단계와 동일하지만, 응답할 때 리소스의 URI를 포함한 링크 요소를 삽입해서 작성해야 한다. 이 링크 요소에 응답 후 액션을 가능하게 하는 하이퍼미디어 컨트롤이 포함되어 있다. 이 링크들은 더 효율적으로 리소스와 기능에 접근할 수 있게 하는 요소가 된다.

cf. 3단계까지 준수하지 못한 API는 HTTP API라고 불러야 한다고 로이 필딩은 주장하지만 대부분의 API는 3단계를 준수하지 못하며, 그럼에도 불구하고 REST API라고 부르기도 한다.

[참고]
https://aws.amazon.com/ko/what-is/api/
https://developer.mozilla.org/ko/docs/Web/HTTP
https://martinfowler.com/articles/richardsonMaturityModel.html

0개의 댓글