- REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
- REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.
REST의 구체적 개념
- 즉, REST는 자원 기반의 구조(ROA, Resoucre Oriented Architecture) 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍쳐를 의미한다.
- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.
장점
단점
- PUT, DELETE를 사용하지 못하는 점
- pushState를 지원하지 않는 점
REST가 필요한 이유
REST 구성 요소
a. 자원(Resource): URI
b. 행위(Verb): HTTP Method
c. 표현(Representation of Resource)
a. Server-Client(서버-클라이언트 구조)
b. Stateless(무상태)
c. Cacheable(캐시 처리 가능)
d. Layered System(계층화)
e. Code-On-Demand(optional)
f. Uniform Interface(인터페이스 일관성)
REST API의 정의
REST API의 특징
REST API 설계 기본 규칙
a. URI는 정보의 자원을 표현해야 한다.
b. 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.
a. 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
b. URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
- URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 한다.
- REST API는 분명한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 슬래시(/)를 사용하지 않는다.
- Ex) http://restapi.example.con/houses/apartments/ (X)
c. 하이픈(-)은 URI 가독성을 높이는데 사용
- 불가피하게 긴 URI 경로를 사용하게 된다면 하이픈을 사용해 가독성을 높인다.
d. 밑줄(_)은 URI에 사용하지 않는다.
- 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.
e. URI 경로에는 소문자가 적합하다.
- URI 경로에 대문자 사용은 피하도록 한다.
- RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.
f. 파일확장자는 URI에 포함하지 않는다.
- REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
- Accept header를 사용한다.
- Ex) http://restapi.example.com/members/soccer/345/photo.jpg (X)
- Ex) GET / members/soccer/345/photo HTTP/1.1
Host: restapi.example.com
Accept: image/jpg (O)
g. 리소스 간에는 연관 관계가 있는 경우
- /리소스명/리소스 ID/관계가 있는 다른 리소스명
- Ex) GET: /users/{userid}/devices (일반적으로 소유 'has'의 관계를 표현할 때)
h. :id는 하나의 특정 resource를 나타내는 고유값- Ex) student를 생성하는 route:POST/students
- Ex) id=12인 student를 삭제하는 route: DELETE /students/12