탄생배경
- REST는 기존의 웹을 망치지 않고 HTTP의 표준 체계를 만들기 위해 로이필딩에 의해 탄생하였다.
정의
- REST 아키텍쳐 스타일을 따르는 API를 REST API라고 하며 REST 아키텍쳐 스타일은 아래와 같은 제약조건을 만족하는 것을 의미한다.
REST 아키텍쳐 스타일
-
client-server 서버와 클라이언트의 역할을 확실히 분리해야 하며
-
stateless : 서버가 클라이언트의 상태 정보를 저장해서는 안되며
-
cache : 클라이언트는 서버로부터 받을 만한 응답을 캐싱할 수 있어야 하며
-
layerd system : 서버와 클라이언트 사이에 중간 서버가 존재하는 구조
-
uniform interface
-
필수는 아니지만 code on demand : 서버에서 클라이언트로 코드를 보내면 클라이언트가 이를 실행할 수 있어야 한다.
- REST 아키텍쳐 스타일 중 uniform interface는 현재 우리가 REST API라고 부르는 것들 대부분은 지키지 않고 있다. 크게 2가지 제약을 어기고 있는데
- self-descriptive message : 보내진 메세지 만들 통해 모든 것을 알 수 있어야 한다.
- 예를들어 Json형태로 API를 이용해 데이터를 주고 받는 과정에서 id, value라는 값이 있다고 치자. 이 Json파일을 전달받은 입장에서는 id가 무엇을 의미하는지, value가 무엇을 의미하는지를 정의해 놓은 문서가 존재하지 않아 스스로 의미를 해석할 수 없다.
- HATEOAS : 애플리케이션의 상태는 하이퍼링크를 이용해 전의되어야 한다.
- 헤이티오스를 만족하기 위해서는 id, value값 이외에 link를 새로 추가하거나 하는 방법을 사용해서 데이터를 전송해야 한다. 하지만 오늘날 대부분의 REST API는 이러한 조건이 지켜지지 않고 있다.
@@@ 실제로 조이필딩이 이 조건들을 제대로 지키지 않은 API들을 REST API로 부르지 말아달라고 트위터와 같은 SNS에 게시한다고 한다.