월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로
쉽게 말하면 HTTP를 잘 사용하기 위한 아키텍처 스타일을 말한다.
RESTful 한 API를 말한다, REST의 일련의 특징과 규칙 등을 지키는 API를 일컫는다.
API에서 자원들은 각각의 독립적인 인터페이스를 가지고, 각각의 자원들이 URL을 통한 자원식별, 표현을 통한 자원조작, Self-descriptive messages, HATEOS 구조를 가지는 것을 말한다.
독립적인 인터페이스라는 것은 서로 종속적이지 않은 인터페이스를 말한다.
즉 한 인터페이스의 변경이 다른 인터페이스에서 동작에 영향을 주지 말아야 한다.
URL을 통한 자원식별
표현을 통한 자원조작 (manipulation of resources through representations)
URL과 HTTP 표준 메서드(GET, POST, PUT, DELETE) 등을 통해 자원을 조회, 삭제 등 작업을 설명할 수 있는 정보가 담겨야 하는 것을 말한다.
GET /books/1 // 책의 1번 페이지를 가져와라
POST /books // body 에 담긴 정보로 책을 생성해라.
PUT /books // body 에 담긴 정보로 책을 갱신해라.
DELETE /books // 책 정보를 삭제해라.
Self-descriptive messages
2. Stateless
HTTP 자체가 Stateless 이기 때문에 HTTP를 이용하는 것만으로도 만족된다. 이는 REST API를 제공해주는 서버는 세션을 해당 서버쪽에 유지않는다는 의미이다.
3. Cacheable
HTTP는 아무런 로직을 구현하지 않더라도 자동적으로 캐싱이 된다. 사설캐시인 브라우저 캐시와 공유캐시인 프록시캐시가 있다. (응답이 304로 날아온다.)
4. Client-Server 구조
클라이언트와 서버가 서로 독립적인 구조를 가져야 한다. 이는 HTTP를 통해 가능한 구조이다. 서버에서 HTTP 표준만 지킨다면 웹에서는 그에 따른 화면이 잘 나타나게 된다. 서버는 API를 제공하고, 그 API에 맞는 비즈니스 로직을 처리하면 되며, 마찬가지로 클라이언트에서 HTTP로 받는 로직만 잘 처리하면 된다.
5. Layered System Architecture
계층구조로 나눠져 있는 아키텍처를 뜻한다. WEB 기반 서비스를 하면 보통 이러한 시스템을 구축하게 된다.