REST란?
| 직역 해석
REpresentational State Transfer = 대표(표상)적인 상태 전달
> 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미한다.
Roy Fielding 2000년 박사학위 논문에서 소개됨. (필딩은 HTTP의 주요 저자 중 한 사람) HyperText Transfer Protocol = 초본문전송규약 - World Wide Web 상에서 정보를 주고받을 수 있는 통신규약 - Client와 Server 사이에 이루어지는 요청/응답(request/response) 통신규약 - HTML 문서를 주고받는 데에 쓰인다. |
| 전문적 해석
World Wide Web과 같은 분산 HyperMedia System을 위한 Software Architecture의 한 형식
> REST는 기본적으로 웹의 기존 기술과 HTTP Protocol을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
| 구체적 해석
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
| REST의 특징
- HTTP Protocol의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
- 규칙의 의한 표현을 따랐을 때 의도하는 바를 명확하게 알수 있다.
- Client와 Server의 역할을 명확하게 분리한다.
- 애플리케이션 분리 및 통합 가능
- 다양한 Client의 커버할 수 있다.
REST 구성
| 자원(Resource)
모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
자원을 구별하는 ID는 HTTP URI이다.
Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
| 행위(Verb): HTTP Method
HTTP 프로토콜의 Method를 사용한다.
HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.
| 표현(Representation of Resource)
Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 상태를 응답한다.
REST에서 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 나타내어질 수 있다. (JSON형태가 일반적)
REST Architecture에 적용되는 6가지 조건
| Uniform Interface
일관적인 인터페이스
| Stateless (무상태성)
작업을 위한 상태 정보(세션, 쿠키)를 따로 저장하고 관리하지 않음. 요청만을 처리함.
| Cacheable
웹 표준(HTTP)을 그대로 사용할 수 있기 때문에 HTTP가 가진 caching기능 적용 가능. 잘 관리되는 caching은 client-server 간 상호작용을 부분적으로 또는 완전하게 제거하여 확장성과 성능을 향상한다.
| Layered System (계층형 구조)
Client는 보통 대상 Server에 직접 연결되었는지, 또는 중간 Server를 통해 연결되었는지를 알 수 없다.
중간 Server는 Load Balancing 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상하는 데 유용하다.
| Code on demand (주문형 코드)
server에서 client가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.
optional
| Client/Server 구조
Architecture를 단순화시키고 작은 단위로 분리함으로써 각 파트가 독립적으로 개선될 수 있도록 해준다.
REST의 목표
| Scalability Of Component Interactions
구성 요소 간 상호작용의 확장성
| Generality of interfaces
인터페이스의 범용성
| Independent deployment of components
구성 요소들의 독립적인 배포
| Intermediary components to reduce latency
중계 구성요소를 통한 응답 지연 감소
| enforce security
보안 강화
| encapsulate legacy systems
레거시 시스템(기존 시스템)의 캡슐화
REST API란?
API (Application Programming Interface)
응용 프로그램(Application)에서 사용할 수 있도록,
운영 체제(OS)나 Programming Language가 제공하는 기능을 Control 할 수 있게 만든 Interface를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
> 데이터와 메서드로 이루어진 집합을 제공하여 컴퓨터 프로그램 간 상호작용으로 정보교환이 가능하도록 하는 것
REST API = REST 기반으로 API를 구현한 것.
REST API 설계 규칙
| 자원의 표현은 URI로 한다.
- 명사, 소문자
- Document 명 = 단수 명사
- Collection 명 = 복수 명사 (Server에서 관리하는 자원 저장소)
- Store 명 = 복수 명사 (Client에서 관리하는 자원 저장소)
GET /users/321
| 자원에 대한 행위는 HTTP Method로 표현한다.
- URI에 HTTP Method가 들어가면 안 된다.
GET /members/delete/1 -- bad
DELETE /members/1 -- good
- URI에 행위에 대한 동사 표현이 들어가면 안 된다.
GET /members/show/1 -- bad
GET /members/1 -- good
GET /members/insert/2 -- bad
POST /members/2 -- good
- 슬래시( / )는 계층 관계를 나타내는 데 사용한다. 마지막에 슬래시( / )를 포함하지 않는다.
https://wr-nood.tistory.com/manage/newpost
- 언더바( _ )는 사용하지 않으며 가독성을 높일 때는 하이픈( - )을 사용한다.
https://wr-nood.tistory.com/tropical_fruits/banana/ -- bad
https://wr-nood.tistory.com/tropical-fruits/banana/ -- good
- 파일 확장자는 URI에 포함하지 않는다. (Accept header에 확장자 삽입)
https://wr-nood.tistory.com/manage/newpost/photo1.jpg -- bad
https://wr-nood.tistory.com/manage/newpost/photo1 -- good
(HTTP/1.1 Host: wr-nood.tistory.com Accept: image/jpg)
RESTful이란?
필딩의 REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭된다.
> RESTful 용어는 공식적인 표현은 아니다.
출처
https://ko.wikipedia.org/wiki/REST
https://ko.wikipedia.org/wiki/HTTP
https://ko.wikipedia.org/wiki/API
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://meetup.toast.com/posts/92
댓글