# REST (Representational State Transfer)

주고 받는 자원(resource)에 이름을 규정하고 URI에 명시해 HTTP메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미합니다. REST 아키텍쳐를 구현하는 웹 서비스를 **RESTful**하다고 표현합니다.

## 특징

- 유니폼 인터페이스
  REST 서버는 HTTP 표준 전송 규약을 따르기 떄문에 프로그래밍 언어나 플랫폼에 상관없이 사용할 수 있습니다.

- 무상태성
  서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미입니다.

- 캐시 가능성
  HTTP의 캐싱 기능을 적용할 수 있습니다.

- 레이어 시스템
  REST 서버는 네트워크 상의 여러 계층으로 구성될 수 있습니다. 클라이언트는 서버와 연결되는 포인트만 알면 됩니다.

- 클라이언트-서버 아키텍쳐
  REST 서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계합니다.


## URI 설계 규칙

- URI의 마지막에는 '/'를포함하지 않습니다.

- 언더바(\_)는 사용하지 않습니다. 대신 하이픈(-)을 사용합니다.

- URI에는 행위(동사)가 아닌 결과(명사)를 포함합니다. 행위는 HTTP 메서드로 표현할 수 있어야 합니다.

- URI는 소문자로 작성해야 합니다.

- 파일의 확장자는 URI에 포함하지 않습니다. 대신 HTTP의 Accept 헤더를 사용하는 것이 좋습니다.