REST API에 대한 고찰

개발새발log·2022년 6월 5일
0

Deview 2017 '그런 REST API로 괜찮은가'를 보고 정리한 글입니다

1. 오늘날 대부분의 REST API는 사실 REST를 잘 따르지 않는다

👉 이는 REST의 제약조건 중 'self-descriptive'와 'HATEOAS'를 만족하지 못하기 때문이다

self-descriptive?
HATEOAS?

- REST를 구성하는 스타일: 
client-server, stateless, cache, uniform-interface, layered system, code-on-demand(optional)

- uniform-interface의 제약 조건 중에
self-descriptive messages
hypermedia as the engine of application state (HATEOAS)이 있다
  • self-descriptive: 메시지는 스스로를 설명해야 한다
HTTP/1.1 200 OK
Content-Type: application/json

[ { "op": "remove", "path": "/a/b/c" } ]

vs.

HTTP/1.1 200 OK
Content-Type: application/json-patch+json

[ { "op": "remove", "path": "/a/b/c" } ]

A: 아래가 self-descriptive하다. 왜냐하면 application/json-patch+json 명세에 "op"와 "path"가 정의되어 있기 때문이다. 단순히 위와 같이 메시지를 작성한 경우, 우리는 "op"와 "path"가 뭔지 알 수 없다. 즉, self-descriptive하지 않다!

  • HATEOAS: 애플리케이션의 상태는 hyperlink를 통해 전이되어야 한다

1) HTML의 경우: HATEOAS를 잘 지켰다

HTTP/1.1 200 OK
Content-Type: text/html

<html>
<head></head>
<body><a href="/test">test</a></body>
</html>

2) HTTP API: 헤더에 링크를 넣음으로써 HATEOAS를 지켰다

HTTP/1.1 200 OK
Content-Type: application/json
Link: </articles/1>; rel="previous",
      </articles/3>; rel="next;
      
{
    "title": "The second article",
    "contents": "blah blah..."
}

2. REST는 긴 시간에 절쳐 진화하는 웹 애플리케이션을 위한 것이다

👉 결국, REST를 따를 것인지 말지는 API를 설계하는 이들이 판단해서 결정할 일이다

  • REST를 따르겠다면, self-descriptive와 HATEOAS를 만족시켜야 한다
  • REST를 따르지 않겠다면, "REST를 만족하지 않는 REST API"를 뭐라고 부를지 결정해야 할 것이다

왜 uniform interface를 정의하는가?

A: 긴 시간에 걸쳐 진화하는 웹 애플리케이션을 위한 것이다

  • Roy의 초기 질문: "How do I improve HTTP without breaking the Web?"
  • uniform interface를 정의함으로써 서버와 클라이언트가 각각 독립적으로 진화가 가능하다
    - 웹은 독립적 진화에 성공했다고 할 수 있음. 완벽한 상호운용성을 지키기 위한 노력 덕분에!
    - (REST API를 지켰다고 말하는 다수의) HTTP API는,, 글쎄,,

우리가 꼭 REST API를 따라야 하는건가?

REST emphasizes evolvability to sustain an uncontrollable system. If you think you have control over the system or aren’t interested in evolvability, don’t waste your time arguing about REST.
- Roy T. Fielding -

Roy: 아니, 네 맘대로 해
대신 너가 시스템의 완벽한 통제권을 가졌거나 그 진화에 관심없다면 말이야!

REST를 따르려면?

  1. self-descriptive 만족하기: mediatype을 IANA에 등록하거나, profile link relation 작성
  2. HATEOAS 만족하기: data, 헤더에 link 달기

REST를 따르지 않겠다면

  • 그냥 HTTP API라고 부르던지,
  • REST api는 아니지만 REST api라고 부르던지! (현재)
    - 물론 Roy 씨는 뒷목 잡음😂

I am getting frustrated by the number of people calling any HTTP-based interface a REST API. ... Please try to adhere to them or choose some other buzzword for your API.
- Roy T. Fielding -

profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글