RESTful API이란 무엇인지, 좋은 설계 원칙에 대해 알아보자.
들어가기에 앞서, 소프트웨어 인터페이스의 디자인 방법과 API의 목표 식별 과정을 간략하게 짚고 넘어가자.
사용하기 쉽고, 이해하기도 쉬운 API를 만드는 건 올바른 관점에 집중하고 있어야 가능하다. 소프트웨어가 어떻게 동작하는지에 집중하기 시작하면 재앙이 벌어진다. 사용자가 무엇을 하는지에 대해 중점을 두면 현실 세계 사물의 사례처럼 모든 좋은 인터페이스를 디자인할 수 있다.
정리하자면, API는 프로바이더의 관점이 아니라 반드시 컨슈머의 관점에서 디자인되어야 한다.
위 그림은 오직 프로바이더만 이해할 수 있게 설계 된 전자레인지의 예시이다. 이는 사용자가 원하는 바를 쉽게 이룰 수 없는 디자인이다. 컨슈머 관점에 집중한 API는 자연스럽게 목표가 명확해지고, 사용하기도 쉬워진다.
이 정보들은 우리가 만들 API의 기초가 되며, 동시에 정확한 API 인터페이스를 디자인하기 위해 꼭 알아야 한다.
REST는 Representational State Transfer라는 용어의 약자로 2000년 로이 필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개되었다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 HTTP 웹 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 한다.
REST API는 다음과 같은 구성을 가진다.
상품 가져오기라는 간단한 예시를 들어보자.
# Request
GET /products/P123
# Response
200 OK
{
"reference": "P123",
"name": "Macbook Pro M2 Max 14 inch".
"price": 3099.00
}
Request는 HTTP 메서드와 /products/P123
이라는 경로의 조합으로 구성된다.
Response의 첫 부분은 HTTP 상태코드 200과 원인을 알려주는 문장 OK로 구성되어 있다.
REST API가 충족해야 할 제약 사항은 다음과 같다. 이는 REST의 특징이라 할 수 있겠다.
REST API 설계 시 가장 중요한 항목은 다음 두 가지로 요약할 수 있다.
HTTP Method를 가지고 CRUD를 매핑할 수 있다.
Method | 역할 |
---|---|
GET | GET을 통해 해당 리소스를 조회한다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다. |
POST | POST를 통해 해당 URI를 요청하면 리소스를 생성한다. |
PUT | PUT를 통해 해당 리소스를 수정한다. |
DELETE | DELETE를 통해 해당 리소스를 삭제한다. |
URI는 자원을 표현하는 데 집중하고 행위에 대한 정의는 HTTP Method를 통해 하는 것이 RESTful한 API를 설계하는 중심 규칙이다.
/
)는 계층 관계를 나타내는 데 사용/
)를 포함하지 않는다.-
)은 URI 가독성을 높이는데 사용_
)은 URI에 사용하지 않는다.좀 더 자세한 규칙은 다음과 같다.
리로스들은 다른 리소스들과 관계가 있을 수도, 없을 쑤도 있다. 리소스 간의 관계를 표현하는 방법은 다음과 같다.
/리소스명/리소스 ID/관계가 있는 다른 리소스명
ex) GET : /users/{userId}/devices (has의 관계를 표현할 때)
ex) GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)
일정한 타입의 리소스 여러 개를 포함하는 리소스를 Collection 이라 한다. Document는 단순히 문서로 이해해도 좋고, 객체라 이해해도 좋다. Collection은 이 객체들의 집합이라 생각하면 된다.
중요한 점은 Collection은 복수로 사용한다.
http:// www.example.com/teams/realmadrid/players/10
REST API의 자세한 디자인 규칙은 REST API 디자인 규칙을 참고해보면 좋을 것 같다.