REST : Representational State Transfer 의 약자로 아키텍처 스타일이다.
아키텍쳐 스타일은 아키텍처 패턴과는 조금 다른데,
텍스트패턴 : 어떤 반복되는 문제 상황을 해결하기 위한 도구
아키텍처 스타일 : 반복되는 아키텍처 디자인
REST 아키텍처 스타일은 6가지 제약조건으로 구성된다.
이 가이드라인을 따르는 API를 RESTful API 라고 한다.
클라이언트-서버 란 리소스를 관리하는 서버가 존재하고, 다수의 클라이언트가 리소스를 소비하기 위해 네트워크를 통해 서버에 접근하는 구조를 의미한다.
상태가 없다 는 것은 클라이언트가 서버에 요청을 보낼 때, 이전 요청의 영향을 받지 않음을 의미함.
ex) /login 으로 로그인 요청을 보내고, 로그인이 되어 다음 페이지인 /page 로 넘어간다고 할 때, /page 리소스를 불어올 때 이전 요청했던 login한 사실을 서버가 알고 있어야 한다. 이것은 상태가 있는 아키텍처 이다.
서버에서 리소스를 리턴할 때 캐시가 가능한지 아닌지 명시할 수 있어야 한다.
HTTP에서는 cache-control이라는 헤더에 리소스의 캐시 여부를 명시할 수 있다.
일관적인 인터페이스 라는 것은 시스템/애플리케이션의 리소스에 접근하기 위한 인터페이스가 일관적이어야 한다는 것이다.
리소스에 접근하는 방식, 요청 형식, 응답 형식이 애플리케이션 전반에 걸쳐 URL, 요청의 형태와 응답의 형태가 일관적이어야 한다는 것이다.
클라이언트가 서버에 요청을 날리 때, 여러 개의 레이어 된 서버를 거칠 수 있다.
ex) 서버는 인증 서버, 캐싱 서버, 로그 밸런서를 거쳐서 최종적으로 애플리케이션에 도착한다고 할 때, 이 사이의 레이어들은 요청과 응답에 어떤 영행을 미치지 않으며 클라이언트는 서버의 레이어 존재 유무를 알지 못한다.
클라이언트는 서버에 코드를 요청할 수 있고, 서버가 리턴한 코드를 실행할 수 있다.
REST는 HTTP와 다르다. REST는 HTTP를 이용해 구현하기 쉽고, 대부분 그렇게 구현하지만 엄밀히 말하면, REST는 아키텍처이고, HTTP는 REST 아키텍처를 구현할 때 사용하면 쉬운 프로토콜이다.
출처 : React.js, 스프링 부트, AWS로 배우는 웹개발 101 책