월드와이드웹(www)같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식
-> Rest는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 사용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
(보통 HTTP URI를 통해 자원을 명시하고 Http Method를 통해 해당 자원에 대한 CRUD 오퍼레이션을 적용한 것이라고 부르는데...명확히는 아니다)
Client-Server
API를 통해 정보를 교환하는 주체는 클라이언트-서버 구조를 가져야 한다.
(자원이 있는 쪽이 서버, 자원을 요청하지 않는 곳이 클라이언트)
Server : API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.
Client : 사용자 인증이나 Context 등을 관리한다.
클라이언트와 서버간 서로의 의존성이 줄어든다.
Stateless
Http프로토콜은 Stateless이므로 Rest도 Stateless이다.
클라이언트와 서버 모두 상대의 상태를 저장하고 있지 않음
Cache
HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.
캐시 사용을 통해 응답이 빨라지고 Rest Server 트랜잭선이 발생하지 않기 때문에 서버의 성능을 향상시킬 수 있다.
Layered System
리소스 상태를 요청하는 클라이언트와 응답을 다시 보내는 서버사이에는 여러 서버가 존재한다.
이러한 서버는 보안계층, 캐싱계층, 부하 분산 계층 또는 기타 기능을 제공할 수 있다.
Uniform Interface
URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
Code-On-Demand
Server로부터 스크립트를 받아서 Client에서 실행한다.
Rest 기반으로 API를 정의한 것