지인의 추천을 받아 동영상을 보게 되었다. 그런 RESP API로 괜찮은가라는 47분가량의 영상이다. 제목부터 느낌 있다. 4 년전 네이버 D2 채널에 올라온 영상이고 흔히 구글에 나와있는 RESP API 개념이랑은 많은 차이가 있는 거 같다. 내가 기존에 알고 있던 개념들과 비교해 보며 47분 동안 시간 가는 줄 모르고 시청했다. 이 동영상의 내용을 휘발성으로 보내기 싫어 기록으로 남긴다.
REST API
REST 아키텍처 스타일을 따르는 API이다. 여기서 REST의 의미는 분산 하이퍼미디어 시스템을 위한 아키텍처 스타일을 의미한다. 아키텍처 스타일이란 제약 조건의 집합 즉 제약 조건들을 모두 만족해야 REST를 따른다고 할 수 있다. 요즘은 HTTP를 잘 지켜도 REST 하다고 표현한다. 하지만 오늘날 스스로 REST API를 만족한다는 서비스들 대부분 REST 아키텍처 스타일을 따르지 않는다.
아키텍처 구성 스타일
1.client-server
2.stateless
3.cache
4.uniform-interface
4-1.identification of resoureces
resource는 URI로 식별돼야 한다.
4-2.manipulation of resources through representations
resource는 representations을 통해 조작해야 한다.
4-3.self-descriptive message
지키기 어렵다. 응답 메시지는 스스로를 설명해야 한다.
4-4.hypermedia as the engine of apllication stats
지키기 어렵다. 서비스의 상태는 Hyperlink를 통해 전이돼야 한다.
지키기 어려운 Uniform-interface를 왜 만족해야 하나?!
웹은 독립적으로 진화해야 한다. 서버와 클라이언트가 각각 독립적으로 진화해야 서버의 기능이 변경되어도 클라이언트를 업데이트할 필요가 없다. 웹 페이지를 변경했다고 해서 브라우저를 업데이트할 필요는 없다. 또한 HTTP와 HTML 명세가 변경되어도 웹은 작동한다. 이는 REST를 만들게 된 계기다. 기존 HTTP의 영향이 없이 웹을 향상시키기 위해서다.
Self-dscriptive와 HATEOAS를 만족하면 얻는 장점
서버나 클라이언트가 변경되더라도 오고 가는 메세지는 self-dscriptive 하므로 언제나 해석이 가능하다. HATEOAS는 어디서 어디로 전이가 가능한지 미리 결정되지 않는다. 어떤 상태로 전이가 완료되고 나서야 그다음 전이될 수 있는 상태가 결정된다. 즉 동적으로 변경될 수 있다.
REST가 독립적 진화에 도움을 주었나?!
REST가 만들어진 후부터 지금까지 HTTP에 지속적으로 영향을 주었다. Host 헤더가 추가되고 URI에서 리소스의 정의가 추상적으로 변경되었다. 그리고 HTTP/1.1 최신 명세판에는 REST에 대한 언급을 한다.
API 서버는 꼭 REST 해야 하나?!
시스템 전체를 통제할 수 있다고 생각하거나 독립적 진화에 관심이 없다면 REST를 따를 필요 없다. 시스템 통제의 의미는 서버 개발자가 클라이언트 개발자를 마음대로 통제할 수 있는 의미이며 독립적 진화의 관심이 없다는 건 자신이 만든 서비스에 틀린 점이 있어도 인정하지 않는다는 의미다.
웹 페이지는 REST 하지만 API는 REST가 어려운 이유
웹 페이지 | HTTP | API |
프로토콜 | HTTP | HTTP |
커뮤니케이션 | 사람-기계 | 기계-기계 |
미디어 타입 | HTML | JSON |
미디어 타입 비교
HTML | JSON |
Hyperlink 가능(a태그) | 정의되어 있지 않음 |
Self-descriptive 가능(HTML 명세) | 문법 해석은 가능하지만 별도 API 문서 필요 |
정리
- REST 스타일 중 보통 Self-descriptive와 HATEOAS 2가지가 충족되기 힘들다.
- REST 스타일을 따를 건지 개발자 스스로 판단하여 결정해야 한다.
- REST 스타일을 따르겠다면 Self-descriptive와 HATEOAS 2가지가 반드시 충족되어야 한다.
https://www.youtube.com/watch?v=RP_f5dMoHFc
'네트워크' 카테고리의 다른 글
로드밸런서 (0) | 2022.08.03 |
---|---|
Proxy (0) | 2022.08.01 |
HTTP 비연결성 무상태성 (0) | 2022.07.30 |
Cors (0) | 2022.07.17 |
http status code (0) | 2022.03.29 |