[WEB] RESTful API
RESTful API
개요
RESTful 이란?
- REST는 REpresentational State Trasfer의 약어로 웹을 이용할 때 제약 조건들을 정의하는 소프트웨어 아키텍처 스타일
- REST 자체의 의미는 네트워크 아키텍쳐 원리(규칙)의 모음이고, 이를 따르는 시스템을 RESTful 이라고 함
- REST를 따르는 옹호자들은 스스로를 ‘RESTafrians’ 이라고 함.
Restful 구성요소
HTTP URI을 통해 리소스를 명시하고 HTTP Method를 통해서 리소스에 대한 CRUD를 제공.
- 자원(Resource) : HTTP URI
- 자원에 대한 행위: HTTP Method
- 자원에 대한 표현 : Representations
HTTP Method
HTTP Method는 다음과 같이 제공된다.
Method | 설명 |
---|---|
GET | 리소스 조회 |
POST | 리소스 생성 |
PUT | 리소스 전체 수정 |
PATCH | 리소스 부분 수정 |
DELETE | 리소스 삭제 |
REST 아키텍쳐 규칙
REST 아키텍쳐를 따르는 RESTful 시스템은 다음과 같은 규칙을 따라야 한다.
- Stateless : 각 요청 간 Client Context가 서버에 저장되어서는 안된다.
- Cacheable: Client의 응답을 캐싱할 수 있어야 한다.
- Layered System: 클라이언트는 보통 대상 서버에 직접 연결되었는지, 중간서버를 통해 연결되었는지 알 수 없다. 중간 서버는 로드밸런싱이나 공유 캐쉬 기능을 제공함으로써 시스템 확장성을 향상시키는데 유용하다.
- Code on Demand(optional) : Java applet, javascript 제공을 통해 Server에서 Client의 로직을 실행할 수 있도록 기능 확장할 수 있다.
- Client-Server Architecture : 아키텍쳐를 단순화 시키고 작은 단위로 분리함으로써 client-server 각 파트가 독립적으로 개선될 수 있다.
- Uniform Interface : 시스템의 각 부분들이 독립적으로 발전할 수 있도록 단순화하고 분리한다. 이를 위해서 4가지 규약이 있다.
- 요청에서 리소스에 대한 식별이 가능해야 한다.
- Representation을 통해 리소스 수정이 가능해야 한다.
- 자체적으로 설명적인 메세지를 가져야한다.
- 어플리케이션 엔진으로의 하이퍼미디어(HATEOAS)
REST API URI 설계 규칙
-
소문자를 사용한다.
http://www.example.com/fruits/Banana (X) http://www.example.com/fruits/banana (O)
-
언더바(_) 대신에 하이픈(-)을 사용한다.
http://www.example.com/tropical_fruits/banana (X) http://www.example.com/tropical-fruits/banana (O)
-
마지막에 슬래시(/)를 포함하지 않는다.
http://www.example.com/fruits/banana/ (X) http://www.example.com/fruits/banana (O)
-
행위(HTTP Method)를 포함시키지 않는다.
POST http://www.example.com/fruits/post/banana (X) POST http://www.example.com/fruits/banana (O)
-
파일 확장자는 URI에 포함시키지 않는다.
http://www.example.com/fruits/banana.jpg (X) http://www.example.com/fruits/banana (O)
-
자원에는 형용사, 동사가 아닌 명사를 사용하며 컨트롤 자원을 의미하는 경우 동사를 허용한다.
http://www.example.com/fruits/creating (X) http://www.example.com/fruits/create (O)
-
URI에 사용되는 영어를 복수형으로 사용한다.
http://www.example.com/fruit/banana (X) http://www.example.com/fruits/banana (O)