REST API 제대로 알고 쓰기

안녕하세요. 테드입니다.
오늘은 RESTful API에 대해 알아보죠.

Web API 부터 알고가자

요즘에는 웹기반 서비스를 개발하다 보면 OPEN API를 요구받는 경우가 많습니다. 오픈 API란 웹사이트에 접속해서 받을 수 있는 여러 서비스를 별도의 API를 통해 제공하는 방식입니다.
우정사업본부에서 제공하는 “도로명주소 조회서비스”가 그 대표적인 예입니다.
스마트 폰이 대중화되면서 어디서든 인터넷에 연결되는 시대입니다. 웹기반 API또한 어디서든 접근이 가능하다는 의미죠. 그렇다보니 공개된 웹서비스를 이용한 2차 서비스, 어플리케이션들도 많이 개발되고 있습니다. 예를들면 “도로명주소 조회서비스” API를 활용해서, 옛날 주소를 입력하면 도로명 주소를 알려주는 어플을 만들수 있는 거죠.

여기저기서 OPEN API 요청이 들어옵니다. 서비스 확산을 위해 요청받은 API들을 하나씩 Open해 주다보면 중구난방이 됩니다. 이때가 개발자들은 API 규칙을 심각하게 고민하는 시점입니다. 어떻게 하면 범용적인 기능을 간단하면서 통일성 있게 제공할지를 말이죠.

아시다시피, 웹서비스나 Web API는 HTTP라는 프로토콜을 사용합니다. HTTP는 POST, GET, PUT, DELETE와 같은 메소드를 제공하고 있구요. 그리고 원하는 서비스에 접근하기 위해 목적지의 URL을 사용하게 되죠. 그래서 URL과 HTTP 메소드를 잘 조합하여 *CRUD API를 제공하는 규칙이 만들어지게 됩니다. 이렇게 탄생한 것이 바로 RESTful API 입니다.
** CRUD : Create(생성), Read(읽기), Update(갱신), Delete(삭제)

그럼 RESTful API가 정확히 뭔가?

한마디로 하자면, HTTP의 기술을 최대한 활용하는 간단한 API 설계 규칙입니다.
달리 말하면, “어떤 자원을”, “어떻게” 처리 할지를 URI 및 HTTP 메소드로 구현하는 것이죠.

RESTful API 특징은 구글링해도 많이 나오지만 간단히 써보자면,

1) Uniform (유니폼 인터페이스)
제한적 인터페이스를 사용하는 아키텍처 스타일을 말합니다.

2) Stateless (무상태성)
작업을 위한 상태정보를 따로 저장하고 관리하지 않습니다. 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다.
REST 개념이 명확하지 않으면 이 부분을 흔히 잘못 구현합니다.

3) Cacheable (캐시 가능)
HTTP라는 기존 웹표준을 그대로 사용하기 때문에 캐싱 기능이 적용 가능합니다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능합니다.

4) Self-descriptiveness (자체 표현 구조)
REST API 메시지만 보고도 동작을 이해 할 수 있습니다.

5) Client – Server 구조
REST 서버는 API 제공자와 사용자가 확실히 구분되기 때문에 클라이언트와 서버 구조의 시스템 개발에 적합합니다.

구현은 어떻게 하는가

예를 들어, example.com이라는 웹서비스에 사용자 관리 API를 구현한다고 생각해 봅시다.
사용자 목록 확인, 신규 사용자 등록, 기존사용자 변경 및 삭제 기능이 필요하겠죠.

1) 사용자 목록 확인

GET: example.com/members

2) 신규 사용자 등록

POST: example.com/members/1

3) 사용자 변경/삭제

PUT: example.com/members/1
DELETE: example.com/members/1

여기서 중요한 부분은 부분은 URI 내에는 동작에 관련된 스트링이 있으면 안됩니다. /members/delete/1 이런식으로 말이죠. 그리고 자원명은 복수 형태로 써주는 것이 일반적입니다. member(x) / members(o)

그리고 자원의 계층구조 또한 URI로 표현해야 합니다. 아래와 같이요.

example.com/administrators/members
example.com/guests/members

여기까지의 규칙만 가지고도 어지간한 리소스 구조를 관리할 수 있는 API를 직관적으로 구성할 수 있습니다. 다른 Minor한 규칙들도 더 있지만, 간단히 이 정도의 개념만 알아도 좋습니다.

결론적으로,

RESTful의 규칙을 따르면 장황한 API Guide를 만들 필요가 없습니다. 또한, 제공하는 API의 구조가 훨씬 간결해지며, API 서버단의 DB구조 설계시에도 REST 개념이 자연스레 녹아들게 됩니다.