자원(Resource), URI
모든 자원은 고유한 ID 를 가지고 있고 서버에 존재하는 ID 를 클라이언트는 각 자원의 상태를 조작하기 위해 요청을 보낸다. HTTP 에서 이러한 자원을 구별하는 ID 는 'Students/1' 같은 HTTP URI이다.
행위(Verb), HTTP Method
클라이언트는 URI 를 이용해 자원을 지정하고 조작하기 위해 Method 를 사용한다. HTTP 에서는 GET,POST,PUT,DELETE,UPDATE 를 제공한다.
표현(Representation)
클라이언트가 서버로 요청을 보내면 서버가 응답을 보내주는 자원의 상태를 Representation이라고 한다. REST 에서 하나의 자원은 JSON, XML, TEXT, RSS, 등 여러 형태로 표현된다.
클라이언트/서버 구조
클라이언트와 서버 각각의 역할이 명확히 구분되기 때문에 개발해야 하는 내용이 명확해지고 서로 간 의존성이 줄어든다.
무상태(Stateless)
작업을 위한 상태정보를 따로 저장하지 않는다. API 서버는 들어오는 요청만 처리한다. 결과적으로 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않아 구현이 단순해진다.
캐시 처리 가능(Cacheable)
REST 는 HTTP 를 활용하기 때문에 기존 인프라를 그대로 활용할 수 있다. 따라서 Last-Modified 태그나 E-Tag를 이용해서 HTTP 의 캐싱 기능을 구현할 수 있다.
자체 표현 구조(Self-Descriptiveness)
REST 의 또 다른 특징은 REST API 메세지만 보고도 이를 이해할 수 있는 자체 표현 구조로 되어 있다는 점이다.
인터페이스 일관성(Uniform Interface)
URI 로 지정한 자원에 대해 조작을 통일하고 한정적인 인터페이스로 수행한다. HTTP 표준만 따른다면 모든 플랫폼에서 사용 가능하다.
계층화 구조
REST 서버는 다중 계층으로 구현될 수 있다. 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고, PROXY, 게이트웨이 같은 네트워크 기반 중간 매체를 사용할 수 있다.