사실 REST API라는 말에 대해서 정말 많이, 그리고 자주 들어 왔지만
정작 REST API를 설명해달라고 하면 뭐부터 이야기해야 할 지 정리가 잘 되지 않았다.
그래서 이번 포스트를 통해 REST API를 차근차근 정리해보려고 한다!
웹의 역사와 REST의 등장 배경
먼저 REST가 등장한 배경을 살펴보기 위해, WEB이 등장한 시점으로 거슬러 올라가자.
www의 창시자인 팀 버너스 리는, 인터넷에서 정보를 공유하기 위해 정보들을 하이퍼텍스트(Hypertext)로 연결하자는
아이디어를 제시하였다. 이를 표현하는 형식을 HTML이라고 하며, 정보를 전송하는 방법을 HTTP라 이름짓고 이를 설계하는 작업에 돌입하였다.
해당 작업에 참여한 로이 필딩은 다음과 같은 생각을 한다.
WEB의 세계는 너무나도 급변하고 있고,
이에 따라 기존에 정의한 HTTP 문서를 수정해야 해
하지만 현재 널리 사용되고 있는 HTTP를 갑자기 수정하면
WEB 생태계에 호환성 문제가 일어날 것 같은데?
그리하여 그는 HTTP Object Model이라는 것을 만들고, 이후 2000년 자신의 박사 학위 논문에서 REST라는 개념을 최초로 제안하게 되었다.
그래서 REST는 뭐지?
먼저 REST(Representational State Transfer)는 웹을 위한 아키텍처 스타일이며,
리소스를 URI로 표현하고, 리소스에 대한 행위를 HTTP 메서드로 정의하는 방식이다.
REST는 6가지의 제약 조건이 있는데, 이를 모두 지켜야 Restful하다고 말할 수 있다.
1. Client-Server : 서버- 클라이언트 사이에 어떤 의존성도 없이 독립적으로 진화할 수 있어야 한다.
2. Stateless(무상태성) : HTTP 요청에 대한 정보를 저장하지 않는다.
3. Cache : 캐시 가능해야 한다.
4. Uniform Interface : 클라이언트 서버 사이의 인터페이스는 균일(Uniform)해야 한다.
5. Layered System : Layered(계층 구조)로 만들 수 있어야 한다.
6. Code-on-demand(선택) : 코드를 클라이언트로 보내서 실행할 수 있어야 한다.(JS)
오늘날의 REST API에서는 HTTP에 대한 명세를 잘 따른다면, 1, 2, 3, 5는 쉽게 충족할 수 있으나 주로 Uniform Interface에 대한 제약 조건이 잘 지켜지지 않고 있다.
다시 Uniform Interface는 4가지 조건으로 이루어지는데,
- 자원에 대한 식별
- 자원이란, 이름을 가질 수 있는 모든 대상을 말한다.
- 자원의 상태는 변할 수 있으므로, 자원을 식별하기 위해 불변하는 고유한 값(URI)를 통해 자원을 식별하자.
- 표현을 통해 자원에 대한 조작
- 표현이란, 특정한 상태의 자원에 대한 표현을 의미한다.
- 자원은 문서, 파일, HTTP 메세지 엔티티 등으로 표현할 수 있다.
- 자원의 상태를 주고 받는다.
- 따라서, REST(Representational State Transfer)란, 그 뜻을 직역하면 "표현된 상태 전송" 인데요, 정리하자면 특정 시점에 자원의 상태를 표현하고, 그 표현을 클라이언트-서버 사이에서 서로에게 전송하는 것을 말합니다.
- 자기 서술적 메세지 : 메세지는 스스로에 대해 설명해야 한다.
- HTTP 목적지와 메서드를 필수로 기재하자.
- 캐시 관련 헤더를 통한 캐시 전략 지정.
- HATEOAS : 애플리케이션의 상태는 하이퍼링크를 통해 전이되어야 한다.
결국 HATEOAS와 REST란 서버를 수정하여도, 클라이언트를 변경할 필요가 없도록 만들어 주었다는 것에서 의의가 있다.
하지만, REST API를 무조건 따라야 하는가?
REST API의 6가지 제약 조건 중 Uniform Interface를 충족시키기 어려운 이유가, 서비스에서는 수많은 상황에 맞게 유연한 API 설계가 이루어져야 하는 반면, 너무나도 표준화된 형태로 정보를 반환할 것을 강제하기 때문이다.
최근에 통용되고 있는 API는 로이 필딩이 논문에 게재한 REST API의 기준으로 봤을 때, 완벽하게 RESTful 하다고는 말할 수 없겠지만, 기본적으로 REST도 결국은 하나의 통신 방식을 위한 것이므로, 현 시대의 모든 API들이 약간 달라진 형태의 REST API를 추구한다면 그 흐름에 맞게 개발하는 것이 좀 더 옳은 방향이 아닐까 생각한다.
출처
'CS > WEB' 카테고리의 다른 글
[WEB] REST API - URI 설계 규칙 (2) | 2023.04.15 |
---|---|
[WEB] HTTP Method란? (0) | 2023.04.13 |