REpresentational State Transfer
: a way of providing interoperability between computer systems on the Internet.
컴퓨터 시스템간의 상호운영성을 제공하는 방법 중 하나다
A: 정보들을 하이퍼텍스트로 연결하낟
어떻게하면 웹을 망치지 않고 HTTP를 고칠까? -> 해결책 HTTP Object Model
이것이 후에 REST라는 이름으로 발표를 한다. 그리고 이걸 2000년에 박사 논문으로 발표한다.
복잡해서 인기가 없었다. 그래서 플리커에서 REST라는 이름으로 간단한 것을 만들었고, 이것이 인기를 끈다.
하지만
REST를 만든 사람은 그것은 REST가 아니다라고 함. 저것은 그냥 HTTP API다.
REST API : REST 아키텍쳐 스타일을 따르는 API
분산 하이퍼미디어 시스템(예: 웹)을 위한 아키텍쳐 스타일
아키텍쳐 스타일이란 제약조건의 집합
대부분은 HTTP를 사용하면서 만족된다.
- Client-server
- stateless
- cache
- layered system
- code-on-demand (optional) - 서버에서 클라이언트에 코드를 보내서 실행될 수 있어야한다: 자바스크립트
처음 두 개는 잘 지켜지고 있다.
- Indetification of resources : 리소스가 URI로 식별된다.
- manipulation of resources through representations : 리소스를 만들거나, 수정하거나, 삭제할 때 Http 메시지에 표현을 담아야 한다.
이것 역시 self descriptive 하지 못하다. 이걸 해석하려면 어떠한 문법으로 작성되었는지 알아야 한다.
이것 역시 부족하다. op가 무슨 뜻인지, path가 무슨 뜻인지 알 수 없다.
미디어 타입이 어떻게 정의되어있는지 추가해주면 그걸 보고 알 수 있다.
즉 메시지 내용으로 온전히 해석이 가능해야하는데, 오늘날의 API는 대부분 그렇지 않다.
상태의 전이마다 항상 해당 페이지에 있던 링크를 따라가기 때문에 HATEOAS가 된다.
a 태그를 통해 링크가 있기 때문에 HATEOAS다.
json에서도 링크라는 헤더를 통해 리소스와 연결된 하이퍼링크를 제공할 수 있다. 이전과 다음 게시물의 링크가 제공되어 있다.
독립적 진화를 하기 위해서
HTTP 1.0을 만들 때 로이필딩이 했던 고민이다. HTTP를 고치고 웹을 안깨는 방법을 고민하다가 나온 것이다.
웹사이트가 변경되어도 웹에 접근은 항상 잘된다. 심지어 HTTP 명세가 바뀌어도 접근이 잘 된다.
HTTP 개정판의 경우 7년동안 토론을 했는데 기능이 하나도 추가되지 않고 문서만 다듬었다. 하위호환성을 깨지 않기 위해서이다.
로이필딩이 HTTP와 URI 명세 둘 다 저자 중 한 명이기 때문에 영향을 주었다.
그럼 REST는 성공했는가
시스템 전체를 통제할 수 있거나 진화에 관심이 없다면 하지마라. 백엔드 개발자가 프론트 개발자를 완벽히 통제 가능하거나, 혼자서 개발하거나 이런 경우.
쉽게 말해 링크를 마음대로 바꿀 수 있다는 얘기다.
번거롭다
상관 없다.
예를 들어 사내에서만 쓰는 것이면 필요 없다.