- REST
컴퓨터 시스템간 상호 운용성을 제공하는 방법 중 하나로,
HTTP통신에서 고려해야하는 개발 방법론(혹은 아키텍쳐 스타일)이다.
- 이미 REST 아키텍쳐 스타일이 잘 적용된 사례가 있다.
전 세계의 모든 웹사이트 들이다.
웹 사이트가 개편 되었다고 해서, 웹 브라우저를 업데이트 해야하는 경우는 드물다. 반대로 웹 브라우저가 업데이트 되었다고 해서, 웹 사이트에 접속이 안되는 경우도 드물다.
이는 전 세계의 대부분의 웹 사이트들이 REST 아키텍쳐 스타일이 잘 적용되고 있다는 반증이다.
- 그렇다면 왜 상호 운용성을 지켜야 하나 ?
이전 버전(하위 호환)에 대한 호환성은 유지해야 하기 때문이고, 그렇게 하지 않으면 웹이 깨진다.
- REST의 목표는 독립적인 발전이다.
- REST API
0. 구성
자원 : URL
행위 : HTTP Method
메서드의 종류 : GET(조회), POST(생성), PUT(수정), DELETE(삭제)
API 는 원격으로 다른 시스템의 메소드를 호출하는 것이고, REST API는 REST 아키텍쳐 스타일을 따르는 API를 말한다. 아키텍쳐 스타일이란 제약조건의 집합이라고 할 수 있다.
그럼 REST의 제약조건의 집합에 대해 알아보자.
1. client-server
client와 server는 분리되어야 한다.
2. stateless(무상태성)
각 요청간clinet와 server는 지속적인 연결이 되지 않으며, 상태정보를 따로 저장하지 않는다.
3. cacheable
캐시 처리 가능(http 통신을 기본으로 하므로 캐시 기능 또한 가지고 있음.)
4. uniform interface(Self-descriptive 와 HATEOAS 를 만족해야 한다는것인데,,, 도통 무슨말인지 모르겠으니 뒤에서 다시 설명한다.)
5. layered system (계층형 구조)
다중 계층으로 구성될 수 있고, 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 들 수 있다.
오늘날 대부분의 REST API는 사실 REST를 잘 따르지 않고 있다.
1,2,3,5번의 경우 대부분의 HTTP API에서도 잘 지켜지고 있는 부분이지만,
REST의 제약조건 중에서 특히 Self-descriptive와 HATEOAS를 잘 만족하지 못한다.
- Self-descriptive
메시지만 보고 해당 API에 대해 해석이 가능해야 한다.
서버나 클라이언트가 변경되더라도 오고가는 메시지는 언제나 self-descriptive하므로
언제나 해석이 가능해야 한다.
- HATEOAS
애플리케이션 상태의 전이(하이퍼링크를 통한 전이).
HTML같은 경우 a태그의 하이퍼링크를 통해서 전이가 가능하기 때문에 HATEOAS를 만족하나,
JSON은 만족하지 못한다.
오늘날 API가 Self-descriptive와 HATEOAS가 잘 만족되지 못하는 이유는 보통 json과 xml데이터로 응답을 하는데, 여기서오는 문제 때문이다.
html은 Self-descriptive와 HATEOAS가 잘 지켜진다.
html의 각 종 태그들은 그 description이 모두 정의되어 있어서 해석이 가능하며, 특정 태그의 속성을 통해 상태의 전이가 가능하지만, json과 xml은 그러지 못한다.
json의 key, value값에 대해 해당 API 전용 문서를 만들지 않는한 json데이터만 보고는 message해석이 불가능하다. xml 또한 사용자 정의 태그가 있어 특정 전용 description 없이는 자체 해석이 불가능하다.
JSON에서 Self-descriptive를 해결하는 방법.
> custom media type이나 profile link relation등으로 만족시킬 수 있다.
JSON에서 HATEOAS를 해결하는 방법.
> HTTP헤더나 본문에 링크를 담아 만족시킬 수 있다.
결론
REST를 따를 것인지는 API 를 설계하는 이들이 스스로 판단하고 결정해야 하는 것이지만,
REST를 따르겠다고 결정했다면 Self-descriptive와 HATEOAS를 만족시켜야 한다.
공부 출처 : http://tv.naver.com/v/2292653
'IT기술' 카테고리의 다른 글
배포전략 (롤링, 카나리, 블루-그린) (0) | 2021.02.25 |
---|---|
마이크로서비스 아키텍처(Microservice Architecture) (0) | 2020.04.23 |
React 란? (0) | 2020.01.19 |