REST란 무엇인가?
REST는 네트워크 아키텍처. 자원의 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미.
(네트워크 아키텍처 : 복잡한 네트워크 시스템을 프로토콜의 조합으로 단순화 한 것을 말한다.)
REST의 특징
- Client, Server : 클라이언트와 서버가 독립적으로 분리
- Stateless : 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다. 예를 들어 가게에서 고객이 주문한 내용을 점원이 저장을 하지 않는다. 모든 요청에 대해 새로운 응답이 있어야한다.
- Cashe : 클라이언트는 서버의 응답을 임시저장 할 수 있어야한다. 클라이언트가 캐쉬를 통해 응답을 재사용 할 수 있어야 함
- 계층화(Layered System) : 여러가지 서버를 계층 형태로 구성을 하여 서버의 확장이 용이해야함.
- 인터페이스 일관성 : 아키텍처를 단순화시켜 작은 단위로 분리하고, 클라이언트, 서버가 독립적으로 개선되어야 함.
- Code on Demand : 특정한 기능을 서버로 부터 클라이언트가 전달받아 전달받은 코드를 클라이언트가 실행하는 것.
REST를 잘 사용했는지 판단하는 요소
- 자원의 식별
웹 기반의 REST에서는 리소스 접근을 할 때 URI를 사용하고 URI안에는 자원을 식별할 수 있는 정보가 포함되어야 함. - 메시지를 통한 리소스 조작
데이터를 전달하는 다양한 방식(HTML, XML, JSON, TEXT 등)이 있다. 이 방식중 어떤 타입의 데이터인지 알려주기 위해 HTTP Header 부분에 content-type을 통해 테이터 타입을 지정한다.
ex) 서버의 user라는 정보의 번호를 number라고 저장했는데 이 정보를 Client와 주고 받을 때, 그대로 사용하고 있었다면 나중에 number를 phone-number로 변경하였을 때 Client가 처리하지 못하고 에러가 남. Client와 Server는 데이터 전체를 전달하는 것이 아닌 일정 규약의 API스펙을 갖고 통신했어야 함. 그리고 서버는 데이터를 읽어서 Client에게 메세지로 정보를 전달했어야 함. - 자기 서술적 메시지
요청하는 데이터가 어떻게 처리 되어져야 하는지 충분한 데이터를 포함할 수 있어야 한다. - 애플리케이션 상태에 대한 엔진으로써 하이퍼 미디어
REST API를 개발할 때 Client요청에 대한 데이터 응답만 해주는 것이 아닌 관련된 리소스에 대한 Link정보까지 같이 포함 되어져야 한다.
REST API는 위의 4가지 규약을 만족하는 API를 말한다.