REST API(REpresentational State Transfer Application Programming Interface)
- REST 기반으로 서비스 API를 구현함
- 인터넷 상의 시스템 간 상호 운용성을 제공하는 방법 중 하나
REST API의 필수 제약 조건
Client-Server
- 클라이언트는 서버에서 어떤 일을 수행하더라도 내부 작업을 알지 않아도 된다.
- 플랫폼의 이식성을 향상시킨다.
- 클라이언트와 서버가 서로 독립적이라 별도의 진화가 가능하다.
Stateless
- 클라이언트에서 서버로 보내는 각 요청에는 그 요청에 필요한 모든 정보가 포함되어야 한다.
Cache
- 요청에 대한 응답 내의 데이터에 해당 요청은 캐시가 가능한지 불가능한지 명시해야 한다.
- 보통 HTTP Header에 cache-control 헤더를 이용한다.
Uniform Interface
- URL로 지정된 리소스에 대한 조작을 통일하고 한정된 인터페이스로 수행하는 아키텍처 스타일이다.
- REST API의 핵심
- 4가지 제약 조건
1. Resource-Based
2. Manipulation Of Resources Through Representations
3. Self-Descriptive Message
4. HATEOAS
- 하이퍼미디어를 애플리케이션의 상태를 관리하기 위한 메커니즘
- REST 애플리케이션 아키텍처의 제약 조건 중 하나
- 클라이언트가 애플리케이션의 서버가 동적으로 제공하는 하이퍼미디어를 통해서만 네트워크 애플리케이션과 상호 작용한다.


레벨 0
- HTTP 프로토콜을 사용하여 API를 구현하지만 모든 기능을 활용하지는 않는다. 또한 리소스에 대한 고유 주소는 제공되지 않는다.
- method: POST URI: /movie/
레벨 1
- 리소스의 고유 식별자가 있지만 리소스 상 각 작업에는 독자적인 URL이 있다.
- method: POST URI: /movie/1/delete
레벨 2
- 동작을 설명하는 동사 대신 HTTP 메서드를 사용한다.
- method: DELETE URI: /movie/1
레벨 3
- HATEOAS가 도입되었다. 리소스에 하이퍼미디어를 도입하며, 이를 통해 가능한 작업에 대해 알려주는 응답에 링크를 배치하여 API를 통해 탐색할 수 있는 가능성이 추가된다.
- method: DELETE URI: /movie/1
JSON+HAL 형식 서버 응답 예시

HATEOAS는 하이퍼미디어 링크를 통해 리소스에 대한 행동의 발견 가능성을 지원하며, 애플리케이션의 현재 상태에 따라 가능한 행동을 보여준다.
HATEOAS의 도입으로, 클라이언트는 서버에서 제공하는 하이퍼미디어 링크만을 따라가면 되므로, 서버의 변경이 클라이언트에 미치는 영향을 최소화할 수 있다. 서버의 URI 구조가 변경되어도 클라이언트는 코드 변경 없이 계속해서 작동할 수 있다.
하이퍼미디어를 통해 제공되는 응답은 실행 가능한 링크와 액션들을 포함하고 있어 클라이언트는 추가 문서 없이도 API를 이해할 수 있다.
참고
HATEOAS까지 사용해야 완벽한 RESTful이다.
HATEOAS를 모르면 당신이 알고 있는 REST API는 REST API가 아니라고 장담할게요.
How to Build Hypermedia API with Spring HATEOAS