API의 엔드포인트 구조를 구현하는 방식에도 널리 알려지고 사용되는 패턴들이 있다.
REST 방식
GraphQL
: REST(Representation State Transfer)ful HTTP API는 API 시스템을 구현하기 위한 아키텍처의 한 형식이다.
API에서 전송하는 리소스를 URI로 표현하고 해당 리소스에 행하고자 하는 의도를 HTTP 메소드로 정의하는 방식이다.
각 엔드포인트는 처리하는 리소스를 표현하는 고유의 URI 주소를 가지고 있으며, 해당 리소스에 행할 수 있는 행위를 표현하는 HTTP 메소드를 처리할 수 있게 된다.
HTTP GET /users
GET /users
POST /user
{
"name" : "Paul"
"email" : "ssm2319@gmail.com"
}
이러한 구조로 설계된 API를 RESTful API라고 한다.
가장 큰 장점은
엔드포인트의 구조만 보더라도 해당 엔드포인트가 제공하는 리소스와 기능을 파악할 수 있다.
즉 구조의 직관성을 올려주는 자기 설명력(self-descriptiveness)이 강하다.
: 엔드포인트가 하나이며, 엔드포인트에 클라이언트가 필요한 것을 정의해서 요청하는 방식이다.
아이디가 1인 사용자의 정보와 그의 친구들의 이름 정보를 API로부터 받아 와야 한다고 생각해보면 일반적인 REST 방식의 API에서는 다음과 같이 두 번의 HTTP 요청을 보내야 한다.
GET /users/1
GET /users/1/friends
이 요청을 한 번의 HTTP 요청으로 줄이기 위해서는 다음과 같은 요청을 보내야한다.
GET /users/1?include=friends.name
둘 다 불필요하게 복잡하다.
만일 사용자 정보들 중 전부 필요하지 않고 이름 혹은 이메일도 필요하다면 HTTP 요청은 더욱 복잡해지게 된다.
GraphQL을 사용하면 다음과 같이 HTTP 요청을 보내면 된다.
POST /graphql
{
user(id: 1) {
name
age
friends {
name
}
}
}
만일 사용자 정보는 이름만 필요하고, 대신 친구들의 이름과 이메일이 필요하다면 다음과 같이 보낸다.
POST /graphql
{
user(id: 1) {
name
friends {
name
email
}
}
}
📌 GraphQL은 최신 기술이므로 널리 사용되고 있지는 않다.
그래서 백엔드 입문자에게는 REST 방식의 API를 이해하고 익숙해지는 것이 더 적합하다.