# REST API(그런 REST API로 괜찮은가)
REST란 무엇인가? 뭐라고 말하기 참 애매하다.
REpresentational State Transfer(?) 무슨 말인가? 하나도 모르겠다.
REST
a way of providing interoperability between computer systems on the Internet.
# REST의 역사
# WEB(1991)
- 어떻게 정보를 공유할 것인가?
- 모든 정보들을 하이퍼텍스트로 연결한다.
- 표현형식: HTML
- 식별자: URI
- 전송방법: HTTP
Roy T.fielding: 어떻게하면 웹을 망가뜨리지 않고 HTTP를 진보시킬까?
해결책으로 HTTP Object Model이 나오고 이것이 바로 4년 후(1998) REST로 발달되게 된다.
2년후(2000)에 박사 논문으로 발표한다.
# API
Salesforce API(2000. 2) SOAP은 인기가 별로 없었다.(너무 복잡함)
Flickr API(2004. 8)에서 REST라는 이름으로 API가 새로 나왔다. 사람들에게는 매우 새로웠음 그리고 구현이 짧아졌다.
SOAP과 REST의 느낌적인 비교
SOAP | REST |
---|---|
복잡하다 | 단순하다 |
규칙이 많다 | 규칙이 적다 |
어렵다 | 쉽다 |
위의 느낌으로 REST의 인기가 치솟는다.
그러다가 CMIS(2008)라는 것이 나왔다. REST 바인딩을 지원함 하지만 Roy T.fielding은 이것을 REST가 아니라고 했다.
Microsoft REST API Guidelines(2016)
- uri는 https://{serviceRoot}/{collection}/{id} 형식이어야 한다.
- GET, PUT, DELETE, POST, HEAD, PATCH, OPTIONS를 지원해야 한다.
- API 버저닝은 Major.minor로 하고 uri에 버전 정보를 포함시킨다.
하지만 이것도 REST가 아니라고 함
뭐가 문제인걸까?
REST API라 함은 REST 아키텍쳐 스타일을 따르는 API이다.
REST는 분산 하이퍼미디어 시스템(예: 웹)을 위한 아키텍쳐 스타일
아키텍쳐 스타일은 제약조건의 집합
따라서, 이 제약조건을 모두 지켜야 REST를 따른다고 말할 수 있다.
REST의 제약조건(REST를 구성하는 스타일)
- client-server
- stateless
- cache
- uniform interface
- layered system
- code-on-demand(optional) -> Javascript
Uniform Interface의 제약조건
identification of resources(리소스가 uri로 식별되면 된다.)
manipulation of resources through representations
self-descriptive message
hypermedia as the engine of application state (HATEOAS)
위의 강조된 두가지는 거의 우리가 지키지 못하고 있다.
Self-descriptive message
메시지는 스스로를 설명해야 한다.
HATEOAS
애플리케이션의 상태는 Hyperlink를 이용해 전이되어야 한다.
Uniform Interface가 필요한 이유
- 서버와 클라이언트가 각각 독립적으로 진화한다.
- 서버의 기능이 변경되어도 클라이언트를 업데이트할 필요가 없다.
- REST를 만들게 된 계기: "How do I improve HTTP without breack the Web"
REST API도 저 제약조건들을 다 지켜야하는가? YES