본 프로젝트 시리즈는 백기선님의 스프링 기반 REST API 개발을 참고하여 만든 과정이며,
본문은 네이버 컨퍼런스 d2에서 이응준님이 발표하신 영상을 보고 정리한 글이다.
대학원생인
Roy T. Fielding
은 박사 논문 발표로부터 시작됨
RE
presentationalS
tateT
ransferA
pplicationP
rogrammingI
nterface
첫 API가 등장하고 기존에 사용하던 SOAP
과 REST
의 비교가 시작되었다.
구분 | SOAP | REST |
---|---|---|
Complexity | 복잡 | 단순 |
Rule | 규칙 많음 | 규칙 적음 |
Usability | 어려움 | 쉬움 |
점차 REST API 사용량이 증가함
2008년 나온 CMIS가 REST 바인딩을 지원했지만…
“No REST in CMIS” -
Roy T. Fielding
-
2016년에 Microsoft는 아래와 같은 REST API Guidelines를 공개했지만…
“이건 그냥 HTTP API” -
Roy T. Fielding
-
또 이런 말들을 하곤 했다.
“REST APIs must be hypertext-driven”
“REST API를 위한 최고의 버저닝 전략은 버저닝을 안 하는 것”
REST API는 아래와 같은 제약조건의 집합이라고 말하고 있다.
uniform interface
나머지는 대체로 만족하는데, uniform interface
중 2가지를 놓치는 경우가 많다고 한다.
self-descriptive message
hypermedia as the engine of application state (HATEOAS)
메시지는 스스로를 설명해야한다
1. HTTP 요청 메세지에는 목적지가 있어야 한다
GET / HTTP/1.1 |
이 HTTP를 본다면 루트를 얻어오는 GET method 구나 할 수 있지만, 이건 추측이지 self-descriptive
하지는 않다.
따라서 아래처럼 추가해줘야한다.
GET / HTTP/1.1 |
2. HTTP 응답 메세지 헤더에는 어떤 문법으로 작성된지 표기해야한다
HTTP/1.1 200 OK |
어떤 문법으로 작성된지 알 수 없기때문에 ,self-descriptive
하지는 않다.
따라서 Content-Type
[3]가 반드시 들어가야 한다.
HTTP/1.1 200 OK |
확실히 해야할 점은, media type
을 표기하여 꼭 이 응답 메세지만으로도 어떤 메세지인지 설명이 가능하여야 한다는 점이다.
여기서는 json patch로 해당 media type
을 알리고 있다.
애플리케이션의 상태는 hyperlink를 이용해 전이되어야 한다.
1. html 응답
HTTP/1.1 200 OK |
이처럼 a태그를 통해 hyperlink가 나와있고, 그 다음 상태로 전이가 가능하기 때문에 HATEOAS
를 만족함
2. json 응답
한 게시물을 json으로 표현 했을 때
HTTP/1.1 200 OK |
이처럼 HTTP header 중 표준으로 나와 있는 Link를 활용했고, 그 다음 상태로 전이가 가능하기 때문에 HATEOAS
를 만족함
독립적인 진화
지금까지 REST API를 지키지 않은 API들이 굉장히 많다.
그렇다면 몇가지 빼먹어도 괜찮지 않을까?
그렇지 않다.
Roy T. Fielding
이 REST API를 아래와같이 지켜야된다고 말을 해버렸다.
하이퍼텍스트를 포함한
self-descriptive
한 메세지의uniform interface
를 통해 리소스에 접근하는 API 다.
Roy T. Fielding
은 REST API가 아니여도 상관 없다고 말했다. 그리고 또 아래와같이 말했다.
시스템 전체를 통제 할 수 있다고 생각하거나, 진화에 관심이 없다면 REST를 따지는것에 신경쓰지마라
먼저 REST가 잘 지켜지고 있는 HTML 과 잘 안지켜지고 있는 JSON 을 비교해보자
1. HTML
GET / HTTP/1.1 |
self-descriptive
Content-Type
을 보고 media type
이 text/html
임을 확인한다.text/html
은 IANA에 등록되어있고, https://w3.org/TR/html
명세에서 해석이 가능하다.self-descriptive
하다고 말할 수 있다.HATEOAS
HATEOAS
또한 만족한다.2. JSON
GET / HTTP/1.1 |
self-descriptive
Content-Type
을 보고 media type
이 application/json
임을 확인한다.application/json
은 IANA에 등록되어있고, 링크를 찾아가 명세에서 해석이 가능하다.id
와 title
이 어떤 의미를 갖는지 알 수 없다. 따라서 self-descriptive
를 만족하지 않는다.HATEOAS
self-descriptive
Media type 정의
단점
Profile 이용
GET / HTTP/1.1 |
단점
HATEOAS
data 활용
다양한 방법으로 data에 하이퍼링크를 표현한다.
이미 JSON에 하이퍼링크를 표현하는 많은 미디어타입이 있고, 활용해도 좋다.
{ |
or
{ |
단점
HTTP 헤더 활용
Location과 Link 등의 헤더로 표현할 수 있다.
HTTP/1.1 204 No Content |
단점