REST는 HTTP 프로토콜을 통신 인터페이스로 사용하여 HTTP 메서드를 통해 데이터를 교환할 수 있게해주는 아키텍쳐 스타일입니다.
REST 아키텍쳐는 6개의 지켜져야할 규칙이 있으며 이를 지켜야 RESTful하다고 말할 수 있습니다.
클라이언트-서버 구조
REST에서는 클라이언트가 완전히 서버와 독립적으로 존재합니다.

무상태
클라이언트의 모든 요청에 대해 서버는 이를 기억하지 않습니다.
즉, 모든 요청은 독립적이며 서버는 각 요청의 관계에 대해 전혀 알지 못합니다.
이것을 무상태라고 합니다.
캐쉬
캐쉬는 자주 접근하는 데이터를 따로 저장함으로써 효율성을 올리는 장치입니다.
REST는 캐쉬를 통해 클라이언트가 서버에 요청을 보내는 빈도를 줄이거나 없앨 수 있습니다.
일관된 인터페이스
클라이언트와 서버 사이에 표준화된 통신 규칙이 있어야 합니다.
일관된 인터페이스에 4가지 규칙이 존재합니다.
4.1 리소스 식별
클라이언트의 요청을 통해 어떤 리소스를 원하는지 정확히 파악할 수 있어야 합니다.
4.2 표현을 통한 리소스 조작
여기서 말하는 표현은 클라이언트와 서버 간에 주고받는 데이터의 형태나 형식을 말합니다. 대표적으로 JSON, XML, HTML등이 있습니다.
리소스 조작은 표현을 통해 충분한 정보를 서버에 제공하여 리소스가 조작되게 해야 합니다.
4.3 자기서술메세지
자기서술메세지는 말그대로 자신에 대해 서술한 메세지로 이 메세지 자체만으로 해석이 가능해야 하다는 것을 말합니다.
즉, 다른 도구나 문서의 도움 없이 메세지만으로 메세지가 이해가 가능해야 합니다.
4.4 HATEOAS(Hypertext As the Engine Of Application State)
HATEOAS는 REST를 통한 응답에는 사용자가 해당 응답 이후에 할 수 있는 요청에 대해 정보를 제공해야 한다는 것을 의미합니다.
레이어 시스템
REST에서 클라이언트는 서버와 직접 메세지를 주고 받는다고 생각하지만 실제로는 클라이언트와 서버 사이에 다른 시스템이 개입하고 있을 수 있습니다.

요청에 따른 코드 실행
서버는 응답으로 클라이언트에 실행가능한 코드를 줄 수 있어야 합니다.
그러나 이 규칙은 선택적으로 꼭 지켜야 하는 것은 아닙니다.
REST의 요청은 여러 부분으로 나누어져 있습니다. 이를 알아보겠습니다.
URL
URL은 리소스를 식별하게 해주며 또한 어떻게 해당 리소스에 접근해야하는지 명확하게 해줍니다.
파라미터
파라미터는 클라이언트가 요청을 통해 보낼 수 있는 정보입니다.
서버는 파라미터를 이용해서 응답을 줄 수 있습니다.
파라미터의 종류는 4개가 있습니다.
2.1 본문
본문은 서버가 성공적으로 요청받은 것을 수행하는데 필요한 정보가 담기는 부분입니다.
2.2 라우트 파라미터
URL에 삽입된 파라미터로 특정 리소스를 나타냅니다.
2.3 쿼리 파라미터
URL부분에서 쿼리부분에 들어가는 파라미터입니다.
주로 리소스에 대해 필터나 검색을 할 때 이용됩니다.
헤더
헤더는 요청에 추가적인 데이터를 보내기 위해 사용됩니다.
HTTP 프로토콜은 REST API에서 HTTP 메서드 뿐만 아니라 상태코드에 대한 정의도 해두었습니다.
이 둘에 대해 알아보겠습니다.
HTTP메서드에는 GET, POST, PUT, PATCH, DELETE 등등이 있습니다.
GET
서버로부터 리소스를 가져오기 위해 사용하는 메서드입니다.
POST
서버에 리소스를 만들기 위해 사용하는 메서드입니다.
PUT
서버의 리소스를 업데이트 하기 위해 사용하는 메서드입니다.
PATCH
서버의 리소스 데이터를 업데이트 하기 위해 사용하는 메서드입니다.
PUT과는 조금 다른데 PUT은 전체를 업데이트하지만 PATCH는 일부만 업데이트 합니다.
DELETE
서버로부터 리소스를 삭제하기 위해 사용합니다.
HTTP 상태 코드는 요청에 대한 응답 상태를 알려주기 위해 사용됩니다.
404 Not Found Error을 보신 적이 있을 겁니다. 여기서 404가 HTTP 상태 코드입니다.
200번대
요청에 대한 응답이 성공적임을 나타냅니다.
200 - 요청이 성공적으로 처리됨
201 - 요청이 성공적으로 처리되었고 리소스를 생성함
204 - 요청이 성공적으로 처리되었고 응답에는 추가적인 컨텐츠는 없음
300번대
리다이렉트 응답을 나타냅니다.
301 - 요청 리소스가 영구적으로 변경되어 새로운 URL이 응답으로 제공
304 - 요청 리소스가 이전에 수정된 적이 없어 캐쉬된 데이터를 가져옴
307 - 요청한 리소스가 임시적으로 다른 URL로 이동되었음을 나타냄
400번대
클라이언트의 에러를 나타냅니다.
400 - 요청이 잘못됨.
401 - 클라이언트가 인증되지 않아 리소스에 대한 접근이 거절됨
403 - 클라이언트는 해당 리소스에 대한 접근이 허가되지 않아 거절됨
404 - 해당 리소스를 찾을 수 없음
500번대
서버의 에러를 나타냅니다.
500 - 서버가 예기치 못한 에러를 만나 응답할 수 없음을 나타냅니다.
503 - 서비스가 사용불가능해 요청에 대한 응답을 못 해줌을 나타냅니다.