REpresentational State Transfer
클라이언트와 서버가 데이터를 주고 받는 방식에 대한 균일한 인터페이스를 설명하는 아키텍처 스타일
REST
에는 기본적인 6가지 원칙이 있고 이 원칙을 충족한 서비스 인터페이스를RESTful
하다고 표현한다.
균일한 인터페이스는 아키텍쳐에 대한 구조를 단순화시키고 가시성을 높힐 수 있다.
균일한 인터페이스를 달성하기위한 4가지 제약 조건
1-1) Identification of resources
인터페이스는 클라이언트와 서버 간의 상호 작용에 관련된 각 리소스를 고유하게 식별해야 한다.
1-2) Manipulation of resources through representations
리소스는 서버 응답에서 균일한 표현을 가져야 한다. API 이용자는 이러한 표현을 사용하여 서버의 리소스 상태를 수정해야 한다.
1-3) Self-descriptive messages
각 리소스 표현에는 처리 방법을 설명하기에 충분한 정보가 포함되어야 한다. 또한 클라이언트가 리소스에 대해 수행할 수 있는 추가 작업에 대한 정보도 제공해야 한다.
1-4) Hypermedia as the engine of application state
클라이언트는 애플리케이션의 초기 URI만 가질 수 있다. 클라이언트 애플리케이션은 하이퍼링크를 사용하여 다른 모든 리소스와 상호 작용을 동적으로 구동해야 한다.
클라이언트-서버는 관심사를 분리하여 구성요소가 독립적으로 개발할 수 있도록한다. 이를 통해
- 사용자 인터페이스(클라이언트)의 여러 플렛폼에서의 이식성
- 데이터(서버)의 구성요소 단순화 & 확장성
을 얻을 수 있다.
클라이언트에서 서버로의 각 요청에는 요청을 이해하고 완료하는 데 필요한 모든 정보가 포함되어야 한다.
서버는 컨텍스트에 대한 어떠한 정보도 가지고 있지 않으며, 때문에 클라이언트는 세션 상태를 온전히 유지하고 있어야한다.
서버는 클라이언트 요청에 대한 응답에 캐싱 가능 여부를 포함시켜야한다.
만약 캐싱이 가능하다면 클라이언트는 해당 요청에 대한 응답 데이터를 재사용할 수 있다.
구성 요소 동작을 제한하여 아키텍처를 계층적으로 구성할 수 있다.
서버는 클라이언트에 전달되는 기능의 일부를 코드 형태로 제공할 수 있다.
클라이언트는 코드를 실행하여 미리 구현해야 하는 기능의 수를 줄여 클라이언트를 단순화시킬 수 있다.