REST API 란 무엇인가?
- REST는 서비스의 인터페이스(uri)를 설계하는 원칙이다. 여기서 REST 란 Representational State Transfer의 줄임말이고, 웹의 장점을 최대한 활용할 수 있는 아키텍쳐이다.
- REST API란 REST 원칙에 입각하여 서비스의 API를 구현한 것을 의미한다.
REST란?
- 자원(Resource)을 URI에 명시하고
- GET, POST, PUT, DELTET 와 같은 http 메서드 사용하여
- 해당 자원의 CRUD를 적용하는 것
REST의 구조와 특징
REST는 다음과 같은 3가지 구조로 이루어진다
- 자원(Resource) - URI
- 자원의 행위(verb) - http Method
- 자원에 대한 행위의 내용(Representation) - Pay Load(Body)
REST의 특징 6가지
- Uniform interface(유니폼 인터페이스)
- 자원에 대한 조작을 URI와 같은 한정적인 인터페이스를 통해 수행함
- 요청된 자원이 식별 가능하며 클라이언트에 전송되 표현과 분리되야함
- 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야함
- 클라이언트에 반환되는 자기기술적(self-descriptive) 메시지에 정보를 어떻게 처리해야할지 설명하는 정보가 충분히 포함되야함
- 하이퍼미디어 : 클라이언트가 리소스에 엑세스한 후 하이퍼링크를 사용해 수행가능한 모든 작업을 찾을 수 있어야함
- Hateoas(Hypermedia As The Engine Of Application State) : HTML 페이지를 통해 http의 하이퍼링크들로 페이지를 이동해 정보를 보여주며 상태가 옮겨다닐 수 있게 만들어야함
- Stateless(무상태성)
REST는 무상태 성격을 가진다 이는 작업을 수행하기 위해 상태정보를 저장/관리하지 않음을 의미한다. 세션/쿠키 정보를 별도로 저장하지 않고 관리한다.
- Cacheable(캐시 가능)
HTTP 웹 표준을 그대로 사용하기 때문에 HTTP가 가진 캐싱기능이 적용 가능해함 -> Last Modified, E-Tag 기능을 통해
- Client-Server 구조
서버와 클라이언트의 역할이 구분되는 형태로 구성하여 서로간의 의존성을 줄어들게 만들어야한다.
- Layerd system(계층형 구조)
REST 서버는 다중 계층으로 구성될 수 있다. 이는 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상 유연성을 줄 수 있고 proxy, gateway와 같은 네트워크 기반 중간매체를 사용가능하게 한다.
- Code-On-Demand(optional)
서버에서 클라이언트로 실행가능한 코드를 전송하여 클라이언트 기능을 확장할 수 있는 기능
REST API의 설계 규칙
- URI는 정보의 자원을 표시해야한다.
- resource는 명사를, 대문자보다 소문자를 사용
GET : /character/1
GET : /characters
- 자원의 행위(verb)는 Http Method를 사용
- 동사표현이 들어가면 안된다
- 경로의 변화하는 부분은 유일한 값으로 대체한다
GET : /usercharacter/delete/{:id} (x)
DELETE : /usercharacter/{:id}
- (/) 구분자는 계층구조를 나타낼때 사용한다
GET : /users/setting
- 마지막에는 슬래시(/)를 넣지 않는다
- 하이픈(-)은 가독성을 높일 때 사용한다
- 밑줄(_)은 사용하지 않는다
- 파일 확장자는 URI에 포함시키지 않는다
- 리소스간 관계는 다음과 같이 표현한다
GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
HTTP 응답 상태코드
클라이언트 요청에 따른 REST API 상태 코드는 다음과 같다.
코드 | description |
---|---|
2XX | 클라이언트 요청 성공 |
3XX | 요청을 완료하기 위해 추가적인 행동이 필요 |
4XX | 클라이언트의 잘못된 요청 |
5XX | 서버 오류 |
[읽을거리]
[참고]