[Network] REST & REST API & RESTful API

REST란?
- REST(Representational State Transfer)는 자원의 표현에 의한 상태 전달을 의미한다. 그렇다면 자원의 표현에 의한 상태 전달이란 무엇일까?
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.
- REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍쳐 스타일이다.
REST 구성요소
- 자원(Resource)
- 모든 자원에 고유한 ID가 서버에 존재한다.
- 자원을 구별하는 ID는
/items/item_id/1 와 같은 HTTP URI이다.
- 자원에 대한 행위(Verb) : HTTP Method
- POST, GET, PUT, DELETE, PATCH 등과 같은 HTTP 프로토콜의 Method를 사용한다.
- 자원에 대한 행위의 내용(Representations) : HTTP Message Pay Load
- 클라이언트가 자원의 상태(정보)에 대한 조작을 요청하면 서버는 이에 적절한 응답(Representation)을 보낸다.
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 나타낼 수 있지만, 주로 JSON을 사용한다.
REST 특징
- 서버/클라이언트 구조(Server-Client) : 클라이언트는 유저와 관련된 처리를 하고, 서버는 REST API 제공
- 무상태성(Stateless) : 서버에서는 상태 정보를 기억할 필요 없이, 요청에 대한 처리만 진행
- 캐시 처리 가능(Cacheable) : 캐시 사용으로 응답 시간, 성능, 서버의 자원 이용률 향상
- 계층화(Layered System) : 클라이언트와 서버가 분리되어 중간매체를 사용할 수 있어 자유도가 높음
- 인터페이스 일관성(Uniform Interface) : 특정 언어나 기술에 종속되지 않음
REST API란?
- REST API란 REST의 원리를 따르는 API를 의미한다.
- 멀티 플랫폼, 멀티 디바이스의 시대에서 여러 브라우저, 아이폰, 안드로이드 애플리케이션과의 통신에 대응하기 위한 범용적으로 사용성을 보장하는 서버 디자인이다.
- API : 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램 간의 상호작용을 촉진하며, 서로 정보를 교환 가능하도록 하는 것을 의미한다.
REST API 수칙
- URI는 자원의 정보를 표시해야 한다.
- 동사보다는 명사, 대문자보다는 소문자 사용
- 문서 이름은 단수 명사를 사용
- 컬렉션 이름과 스토어 이름은 복수 명사를 사용
GET /items/1
- 자원에 대한 행위는 HTTP Method(POST, GET, PUT, DELETE, PATCH 등)로 표현한다.
- URI에 HTTP Method가 들어가면 안된다.
- URI에 행위에 대한 동사 표현이 들어가면 안된다.
- 경로 부분 중 변하는 부분은 유일한 값으로 대체한다 (예시 : 고유한 id)
DELETE /items/1
REST API 설계 규칙
- 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
http://restapi.example.com/categories/foods
- URI 마지막 문자로 슬래시를 포함하지 않는다.
- 하이푼(-)은 URI 가독성을 높이는데 사용 된다. 주로 URI 경로가 길 때 사용한다.
- 언더바(_)는 사용하지 않는다.
- URI 경로에는 소문자가 적합하다.
- 파일 확장자는 URI에 포함시키지 않는다.
RESTful이란?
- HTTP와 URI를 기반으로 자원에 접근할 수 있도록 제공하는 애플리케이션 개발 인터페이스이다. 기본적으로 개발자는 HTTP Method와 URI만으로 인터넷 자료를 CRUD할 수 있다.
- REST API를 제공하는 웹 서비스를 RESTful 하다고 할 수 있다.
Ref.