REST API
- Representational State Transfer API
- HTTP의 주요 저자 중 한명인 로이 필딩이 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 논문에서 소개
- 자원, 행위, 표현
REST API의 6가지 특징
Uniform (유니폼 인터페이스)
- Uniform이란 균일하다, 동일하게 하다, 평준화하다 의 의미를 가진다.
이와 같은 의미로, REST API는 uniform interface를 제공하여 자원(resource)에 대한 조작이 한정되고 통일된 형태로 이뤄지도록 만들어준다. 이는 곧 플랫폼에 종속적이지 않은 인터페이스를 제공한다는 것이다.
- Self-descriptiveness (자체 표현 구조)
REST API의 메시지는 다른 복잡한 해석 절차나 외부 모듈없이 그 스스로 쉽게 이해가능한 자체 표현 구조를 가진다.\
- HATEOAS(Hypermedia As The Engine Of Application State)
요청에 포함된 자원, 동작에 대해 URI를 포함해 응답하여 서버와 클라이언트 간의 동적인 상호작용을 도와준다.
- Resource Identification In Requests
요청으로 자원을 식별할 수 있어야 한다.
- Resource Manipulation Through Representations
표현을 통해, 자원에 대한 조작을 실행한다.
Stateless (무상태성)
세션 정보나 쿠키 정보와 같은 별도의 상태 정보를 저장하고 관리하지 않는다.
서비스의 자유도가 높아지며 요청에 대한 처리에 집중할 수 있도록 해준다.
Cacheable (캐시 가능)
REST API는 HTTP protocol을 기반으로 한 아키텍쳐이기 때문에 HTTP가 가진 캐싱 기능이 적용 가능하다.
HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용해 캐싱을 구현할 수 있다.
Client - Server 구조
클라이언트와 서버가 명확히 구분되어, 의존성이 줄어든다.
계층형 구조
다중 계층을 사용해 보안, 로드 밸런싱 등의 계층을 둘 수 있으며,
Proxy, Gateway와 같은 네트워크 미들웨어를 가질 수 있다.
Code On Demand(Optional)
클라이언트가 서버가 요청에 대해 어떻게 처리할지 주문한다. 주문형 코드
REST API 디자인 가이드 (표준X)
- URI로 정보의 자원을 표현, HTTP Method로 자원에 대한 행위를 표현
- 슬래시 구분자(/)를 통해 계층 관계를 표현한다.
ex) waristo.tistory.com/computer-science/network
- URI 마지막에 슬래시 구분자(/)를 사용하지 않는다.
- 밑줄(_)을 URI에 사용하지 않는다. (가독성)
- 가급적 대문자 사용을 하지 않는다. (대/소문자의 구분)
- 파일 확장자를 URI에 포함하지 않고, Header를 사용한다.
HTTP Method
- GET: Read, 특정 자원을 조회, 자원에 대한 상세 정보를 가져온다.
- POST: Create, 새로운 자원을 생성한다.
- PUT: Update, 자원에 대한 수정 => PATCH와의 차이점은 자원의 전체 교체(PUT), 자원의 일부 교체(PATCH)
- DELETE: Delete, 자원을 삭제
이외에 HEAD, CONNECT, OPTIONS, TRACE가 있다.
Colllection과 Document
- Document는 문서, 객체라고 이해할 수 있다.
- Collection은 Document의 집합
- 둘 모두 자원(resource)이라고 할 수 있으며, URI로 표현할 수 있다.
- Collection은 복수형, Document는 단수형으로 지켜주는 것이 좋다.
REST API의 장점
- Open API 제공에 용이하다.
- 플랫폼에 종속적이지 않기 때문에, 멀티 플랫폼 제공에 용이하다.
REST API의 단점
- 디자인에 대한 명확한 표준 규약이 없다.
- JSON , XML 형태의 데이터는 RDBMS 표현에 적합하지 않다.
HTTP에 대한 더 많은 참고는 mozilla web doc과 RFC 문서를 추천한다.
참고)