RESTful API란 Representational State Transfer (REST) 아키텍처 스타일을 따르는 API를 의미한다.
API란?
API는 애플리케이션 사이에서 통신을 위해 약속된 규칙의 집합이다. 웹 서버와 클라이언트의 통신에서 서버가 정의한 URL로 클라이언트가 요청을 보내는 것을 생각해보자.
웹 애플리케이션 사이의 통신을 위해 정의된 표준화된 규약을 제공하기 때문이다. 웹 상의 클라이언트와 서버가 같은 표준을 따르게 되어 제약 없이 자유롭게 통신이 가능하게 된다.
URI는 자원을 중심으로 설계
자원이란 상호작용 가능한 데이터를 의미한다. 즉, URI에는 목적이 들어가지 않아야 한다. 동사가 아닌 명사로만 구성하는 것이 RESTful한 설계이다.
HTTP 메서드로 자원에 대한 행위를 요청
URI가 자원 자체를 의미한다면 메서드는 자원에 대한 목적을 의미한다. 대표적인 4가지 메서드가 있다.
- GET : 자원을 읽고 가져올 때 사용
- POST : 새로운 자원을 추가하기 위해 사용
- PUT : 자원을 수정하기 위해 사용
- DELETE : 자원을 삭제하기 위해 사용
URI와 메서드를 사용하여 RESTful하게 작성한 API와 그렇지 못한 API를 비교해보자.
/getAllUsers
=> GET /users
/create/{user_id}
=> POST /users
/update/{user_id}
=> PUT /users/{user_id}
/delete/{user_id}
=> DELETE /users/{user_id}
자원의 형식을 명시
애플리케이션 사이에서 형식을 명시하여 자원의 상태를 표현해 데이터를 주고받는다. 이러한 형식에는 HTML, XML, JSON등이 있다.
무상태성
무상태성이란 서버가 클라이언트의 상태나 요청을 기억하지 않는 것을 의미한다. 서버는 클라이언트를 구분하지 않고, 클라이언트는 요청 안에 모든 정보를 입력해야 한다. 가령 세션을 사용하지 않고 토큰 기반으로 인증하는 것이 무상태성을 따르는 방식이다.
HTTP 상태 코드 반환
서버는 요청의 결과를 명시하기 위해 HTTP 상태 코드를 반환한다. 가령, 200은 요청이 성공적으로 처리되었음을 의미하고, 404는 클라이언트가 잘못된 URI로 자원에 접근하려 함을 의미한다. 백의 자리수에 따라 다른 의미를 갖는데, 간략하게 요약하면 아래와 같다.
- 200~: 요청을 성공적으로 수행
- 300~: 추가 작업이 필요. 리다이렉션이 여기에 속한다.
- 400~: 클라이언트 요청이 잘못되었음.
- 500~: 서버에서 오류가 발생함
계층 구조 사용
클라이언트, 서버, 데이터베이스 등을 계층 구조로 모듈화하여 각 계층의 독립성을 보장하고 유지보수와 확장을 용이하게 만들 수 있다.