REST 란?
- 인터넷 상의 시스템 간의 상호운용성(Interoperability)을 제공하는 방법 중 하나
- HTTP 통신에서 CRUD 요청을 자원(Resource)과 행위(Method)로 표현하여 특정한 형태(JSON, XML)로 전달하는 기술
- 자체 표현 구조라는 제일 큰 특징을 가짐(직관적, 어떤 행위를 하는지 API 만으로 쉽게 파악)
REST 구성 요소
- Resource(자원)
- Method(행위)
- HTTP Method
- 서버에 요청을 보내기 위한 방식으로 GET, POST, PUT, PATCH, DELETE 등이 있다.
- CRUD 연산 중에서 처리를 위한 연산에 맞는 Method를 사용하여 서버에 요청을 보낸다.
- Representation(표현)
- HTTP Message Payload
- Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답Representation(표현)을 보낸다.
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation(표현)으로 나타내어 질 수 있다.
REST 특징
- Server-Client(서버-클라이언트 구조)
- Server 와 Client간 의존성이 줄어든다.
- 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client
- REST Server : API를 제공하고 비즈니스 로직 처리 및 저장을 책임
- Client : 사용자 인증이나 Context(세션, 로그인 정보) 등을 직접 관리
- Stateless(무상태성)
- HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무성태성을 가진다.
- Client의 Context를 Server에서 유지하지 않는다.
- Server는 Client의 요청 만을 단순 처리한다.
- Cacheable(캐시 처리 가능)
- HTTP의 특징 중 하나인 캐싱 기능을 적용할 수 있다.
- Last-Modified 태그나 E-Tag를 이용한다.
- Self-descriptiveness(자체 표현 구조)
- JSON을 이용한 메시지 포맷을 이용하여 직관적으로 이해할 수 있고 REST API 메시지 만으로 그 요청이 어떤 행위를 하는지 알 수 있다.
- Layered System(계층화)
- REST Server는 다중 계층으로 구성될 수 있다.
- 클라이언트와 서버가 분리되어 있기 때문에 중간에 프록시 서버, 암호화 계층 등 중간 매체를 사용할 수 있어서 자유도가 높다.
- Uniform Interface(인터페이스 일관성)
- URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능
- REST API 정의를 HTTP + JSON으로 하였다면, C, Java, Python 등 특정 언어나 기술에 종속되지 않고, 모든 플랫폼에 사용이 가능한 Loosely Coupling 구조
REST API 설계 규칙
- 자원(URI)에 대한 행위는 HTTP Method(POST, GET, PUT, DELETE)로 표현해야 한다.
- URI는 동사보다 명사를, 대문자보다는 소문자를 사용