Network

[Network] REST API 개념 및 성숙도 모델

pongic 2022. 10. 10. 18:03
반응형
REST API란?

REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말한다. 여기서 REST는 Representational State Transfer의 약자로 로이 필딩의 박사학위 논문에서 웹(HTTP)의 장점을 최대한 활용할 수 있는 아키텍처로써 처음 소개되었다.

 

 

REST API 성숙도 모델

REST 성숙도 모델은 총 4단계로 나누어진다. 그러나 실제로 엄밀하게 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API디자인이라고 볼 수 있고, 이런 경우 HTTP API라고도 부른다.

 

성숙도 모델 0단계

단순히 HTTP 프로토콜을 사용하기만 해도 된다. 하지만 해당 API를 REST API라고 할 수는 없으며 좋은 REST API를 작성하기 위한 기본 단계

 

성숙도 모델 1단계

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

예약 가능한 시간 확인이라는 요청의 응답으로 받게 되는 자원(Resource)은 허준이라는 의사의 예약 가능한 시간대이다.

그렇기 때문에 요청 시 엔드포인트를 사용하였다. 

 

특정 시간에 예약하게 되면 실제 slot이라는 자원(Resource)의 123이라는 id를 가진 자원(Resource)이 변경되기 때문에 하단의 특정 시간에 예약이라는 요청에는/slot/123으로 실제 변경되는 자원(Resource)을 엔드포인트로 사용하였다.

 

엔드포인트 작성 시에는 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 명사 형태의 단어로 작성하는 것이 바람직하다.

 

요청을 하였을 때 해당 시간이 마감되어 예약이 불가능한 경우를 가정하면 아래와 같이 응답을 받아야 한다.

 

성숙도 모델 2단계

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

예약 가능한 시간을 확인하는 것은 조회(READ)하는 행위를 의미하고 특정 시간에 예약한다는 것은 예약을 생성(CREATE)한다는 것과 같다. 조회(READ) 하기 위해서는 GET 메서드를 사용하여 요청을 보내고, GET 메서드는 body를 가지지 않기 때문에 query parameter를 사용하여 자원(Resource)을 전달한다.

 

예약을 생성(CREATE) 하기 위해서는 POST 메서드를 사용하여 요청을 보낸다. 이 경우 응답 코드도 201 Created로 명확하게 작성해야 한다.

HTTP 메서드

GET 서버의 데이터를 변화시키지 않는 요청에 사용하고 지정된 리소스의 표현을 요청한다.
POST 요청마다 새로운 리소스를 생성한다. 데이터 등록에 사용
PUT 요청마다 같은 리소스를 반환한다. 데이터 교체에 주로 사용, 멱등성을 가지는 특징이 있다.
PATCH 리소스의 부분 수정의 용도로 사용한다.
DELETE 지정된 리소스를 삭제한다.
HEAD GET 요청과 동일한 응답을 요청하지만 응답에 body는 없다.
OPTIONS 대상 리소스에 대한 통신 옵션
CONNECT 대상 리소스로 식별되는 서버에 대한 터널을 설정한다.
TRACE 대상 리소스에 대한 경로를 따라 메시지 루프백(Loopback) 테스트를 수행한다.

 

 

성숙도 모델 3단계

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

허준이라는 의사의 예약 가능 시간을 확인 후 그 시간대에 예약을 할 수 있는 링크를 삽입하거나 특정 시간에 예약을 완료하고 나서는 그 예약을 다시 확인할 수 있도록 링크를 작성해 넣을 수도 있다.

반응형