GraphQL과 REST api의 차이점
서버 api를 개발하는 방법으로 가장 많이 사용되는 방식인 GraphQL과 Rest API 어떤 차이점이 있을까?
GraphQL (Graph Query Language)
Server API를 구성하기 위해 Facebook에서 만든 쿼리 언어.
흔히 접하는 MySQL에서 사용되던 그 언어 말이다.
하지만 SQL은 DB로부터 데이터를 가져오기위함에 목적이 있다면
GraphQL은 클라이언트가 서버로부터 데이터를 가져오기위함에 목적이 있다.
REST처럼 어떠한 플랫폼에도 종속적이지않다.
일반적으로 gql의 인터페이스간 송수신은 네트워크 레이어 L7의 HTTP POST 메서드와 웹소켓 프로토콜을 활용한다.
필요에 따라 L4의 TCP/UDP, L2 형식의 이더넷 프레임도 활용할 수 있다고 한다.
REST와 비교했을 때 차이점은 다음과 같다.
1. GraphQL api는 보통 하나의 엔드포인트를 가진다.
2. 요청할 때 사용하는 쿼리에 따라 다른 응답을 받을 수 있다.
하나의 엔드포인트
REST API는 클라이언트가 서버로부터 응답을 받기위해서는 URL, Method 등을 조합하여 사용하기때문에 엔드포인트가 여러개다. 반면에 GraphQL은 하나의 엔드포인트를 통하지만 요청 쿼리에 따라 다른 응답을 반환한다.
REST API
→ example.com/posts
→ example.com/posts/150
GraphQL
→ example.com
(하나의 엔드포인트에 다른 쿼리를 사용해 요청)
쿼리에 따른 응답
REST API는 엔드포인트에 정해진 응답만의 데이터를 받아올 수 있지만,
GraphQL은 쿼리를 통해 필요한 데이터만 받아올 수가 있다.
특정 사용자의 정보중 name만 필요하다고 했을 때 아래와 같은 차이점이 있다.
REST는 사용자의 불필요한 정보까지 응답 받을 수밖에 없고, GraphQL은 name만 골라서 받아올 수 있다.
//REST API 요청
GET, https://example.com/api/users/1
//결과
{
'name':'sungtt',
'height':'182',
'age':'28'
}
//GraphQL 요청
query {
users(personID: 1) {
name
}
}
//결과
{
"data": {
"users": {
"name": "sungtt"
}
}
}
GraphQL의 장단점
장점
1. HTTP 요청 횟수 감소
REST는 필요한 데이터를 여러 엔드포인트에서 받아와야만 하는 경우도 있지만,
GraphQL은 하나의 엔드포인트에 쿼리에 필요한 데이터만 요청하여 받아올 수가 있다.
2. HTTP 응답 사이즈 감소
이 또한 필요한 데이터만 요청하여 받아올 수 있기에 존재하는 장점이다.
3. 프론트엔드 - 백엔드 협업 문화 변화
REST API는 클라이언트와 서버간의 요청/응답 형식에 의존하기때문에 개발 시 커뮤니케이션이 필요한 경우가 많다.
반면에 GraphQL은 요청/응답 형식에 대한 의존성이 많이 떨어지기때문에 API개발에 대한 커뮤니케이션 부담을 덜 수가 있다고한다.
단점
1. 멱등성이 확실한 요청과 응답의 경우 쿼리로 인해 요청의 크기가 REST보다 커질 수 있다.
2. 캐싱이 REST보다 복잡하다.
GraphQL 자체는 쿼리 언어이기때문에 이것만으로는 할 수 있는게 없다.
실제로 활용하기위해서는 아래와 같은 라이브러리를 접해야한다.
- Relay
- Apollo
https://cloud.google.com/blog/ko/products/api-management/interacting-with-apis-rest-and-graphql
API와의 상호작용: REST 및 GraphQL | Google Cloud 블로그
API와 상호작용하는 두 가지 주요 접근방식인 REST와 GraphQL을 비교하고 Apigee API 관리를 통해 어떻게 REST와 GraphQL을 관리할 수 있는지 알아봅니다.
cloud.google.com