자원을 이름(표현)으로 구분하여 해당 자원의 상태(정보)를 주고받는 소프트웨어 프로그램 아키텍처의 형식 중 하나이다.
클라이언트-서버 구조
자원을 보유하고, 제공하는 서버와 자원을 요청하는 클라이언트가 통신한다.
서버는 REST API(인터페이스) 제공, 비즈니스 로직 처리 및 저장을 담당하고, 클라이언트는 사용자 인증 또는 context(세션, 로그인 정보 등) 관리를 직접 담당한다. REST를 사용하면 서버와 클라이언트 간 의존성이 줄어든다.
Stateless (무상태성)
HTTP 기반으로 통신하기 때문에 HTTP의 무상태성 특징을 갖는다.
즉, 서버는 들어온 요청에 대한 처리만 담당하며 연결에 대한 상태 정보를 기억할 필요가 없기 때문에 구현이 쉽고 단순해진다.
Cacheable (캐시 처리 가능)
웹 표준 HTTP 프로토콜을 사용하므로 웹에서 사용하는 기존 인프라를 활용할 수 있다.
대량의 요청을 효율적으로 처리하기 위해 캐시를 사용한다. 캐시 사용을 통해 응답 시간이 빨라지고, REST 서버 트랜잭션이 발생하지 않기 대문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있다.
Layered System (계층화)
클라이언트와 서버가 분리되어 있기 때문에 서버를 다중 계층으로 구성할 수 있다.
api 서버는 순수 비즈니스 로직만 수행하고, 보안, 로드 밸런싱, 암호화 계층 등을 추가해 구조상 유연성을 둘 수 있다. 또한 proxy, gateway 등 네트워크 기반의 중간 매체를 사용할 수 있다.
Self-descriptiveness (자체 표현 구조)
JSON 메시지 포맷을 이용한 직관적인 표현 구조로, REST API만 보고 요청에 대해 쉽게 이해할 수 있다.
Uniform (유니폼 인터페이스)
Uniform interface는 HTTP 표준만 따른다면 모든 플랫폼에서 사용 가능하며, URI로 지정한 리소스에 대한 조작을 가능하게 하는 아키텍처 형식이다.
URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. 즉, 특정 언어나 기술에 종속되지 않기 때문에 HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용 가능하다.