로이 필딩 선생님,,,,
기초 영상
심도 있는 영상 - 이 영상을 주로 참고하여 포스팅했습니다
REpresentational State Transfer
2000년, 로이 필딩 Roy T. Fielding의 박사 논문으로 발표됐고, 로이는 HTTP 1.0과 1.1의 주요 저자 중 한 사람이다.
REST는 과거 SOAP이란 복잡한 방식을 대체하고자 나왔다.
먼저 REST API는 웹에서 사용되는 자원(Resource)를 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청/응답을 정의하는 방식이다.
❌ 유저, 팀 동료가 이해하기 힘든 표준 없는 API
GET /movies/create/1
GET /deleteMovie/inception
GET /findMoviesFromThisYear
⭕️ 모두 이해하는 직관적 API
(메서드 /collection/ element)
GET /movies/
PUT /movies/inception/actors
리소스는 collection
과 element
으로 나눠 표현할 수 있다.
http://example.com/resources/
http://example.com/resources/item17
REST API
: REST 아키텍쳐 스타일(제약조건 모두 지키는) 따르는 API.
REST 란?
: 분산 하이퍼미디어 시스템(예:웹)을 위한 아키텍쳐 스타일(제약조건의 집합)
= 서버와 클라이언트의 각각 독립적 진화 위해서.
<REST 잘 적용된 사례>
= Web
웹 페이지나 브라우저 변경했다고 브라우저 업데이트하거나 페이지를 변경할 필요가 없다
<REST 잘 적용안된 사례>
= App
업데이트 계~속 해야하는 것
Web page | HTTP API | |
---|---|---|
Media Type | HTML | JSON |
Hyperlink | <a> 태그로 링크 걸 수 있음 | 링크 없음 |
셀프 설명 | html 명세로 정의되어 있음 | 밑에 사진 예시를 들면 id, title에 대한 의미 설명되어 있지 않아서 불완전함 |
미디어 타입 문서를 작성하는데 여기에 id, title의 의미를 정의한다. 이 문서를 명세로 등록하면 메시지를 보는 사람이 명세를 찾아가므로 메시지 의미를 해석할 수 있다. 미디어타입 등록이 필수는 아니다.
id, title의 정보가 담긴 명세 작성해 Link 헤더에 profile relation으로 명세를 링크한다. 메시지를 보고 명세 링크를 볼 수 있으므로 문서의 의미를 해석할 수 있다.
data, header를 모두 활용하면 좋다
1-1) 링크 표현 방법을 직접 정의
1-2) 하이퍼링크를 표현하는 방법을 정의한 명세들 활용
(JSON API, HAL, UBER, Siren, Collection+json 등).
Link, Location 등의 헤더로 링크 정의한다.
대부분 진짜 REST 따르지 않는다.
이유 : 제약조건 중 Self-descriptive와 HATEOAS를 잘 지키지 못하기 때문에
REST는 수십년 진화하는 웹 애플리케이션 위한 것
REST를 따를 건지는 API 설계자들이 스스로 판단해서 결정해야한다.
REST를 따를거면, Self-descriptive와 HATEOAS를 지켜야한다.
1. Self-descriptive는 custom media type이나 profile link relation 등으로 만족 가능하다.
2. HATEOAS는 http 헤더나 본문에 링크를 담아 만족 가능하다.
REST를 안따를거면, "REST를 만족하지 않는 REST API"를 뭐라고 부를지 결정해야 할 것이다.
- HTTP API라 부를 수 있고
- 그냥 REST API라고 부를 수도 있다. (REST를 만든 roy가 싫어한다)