GraphQL vs REST API (2)

김민아·2022년 10월 6일
0

GraphQL vs REST API

GraphQL vs REST API

📍 GraphQL의 특징

Over-Fetching과 Under-Fetching 개선

  • OverFetching: 클라이언트의 요청보다 더 많은 데이터를 반환하는 경우를 말한다. (필요 없는 데이터까지 제공하는 것)
  • Underfetch: 하나의 endpoint에 원하는 데이터가 한 번에 오지 않는 것, 원하는 데이터를 얻기 위해 여러번 API를 호출해야 하는 경우를 말한다.

GraphQL은 HTTP 요청 횟수와 응답 사이즈를 줄일 수 있다.

하나의 엔드포인트

REST API는 여러 endpoint가 존재하고 endpoint마다 SQL 쿼리가 달라지는 반면, GraphQL은 하나의 엔드포인트를 가지며, 각 GraphQL은 스키마(데이터 리소스)으로 SQL 쿼리가 달라진다.

응답 데이터에 대한 정의와 요청 방식

REST API의 응답 데이터의 크기와 형태는 서버에서 결정하지만, GraphQL은 클라이언트 단에서 요청할 때 정의한다. 또한, REST API는 형태 정의와 데이터 요청 방법(method)이 연결되어 있지만, GraphQL에서는 형태 정의와 데이터 요청(query, mutation 등)이 분리되어 있다.


📍 구현

REST API

학생 정보 중 usernamegender 여부가 필요하다고 가정한다.

// (GET) https://example.com/api/students/1 
{
	"username": '홍길동',
    "membership": true,
    "friends": ['김나비', '이철수', '최영수'],
    "gender": "male",
    "grade": 4,
    "address": "",
}

클라이언트가 원하는 값 이외에도 불필요한 정보도 함께 받는다.(OverFetching) 클라이언트의 요청을 명시할 수 없다.

GraphQL

요청

// https://example.com/graphql
query {
	students(studentId: 1) {
    	name
        gender
    }
}

응답

{
  "data": {
  	"student": {
    	"name": "홍길동",
        "gender": "male"
    }
  }
}

클라이언트가 원하는 데이터만 불러올 수 있다. 필요한 데이터를 명시적으로 작성할 수 있다. (커뮤니케이션 비용절감 가능)


📍 GraphQL의 단점

  • 캐싱이 REST보다 훨씬 복잡하다.
    HTTP에선 각 메소드를 기준으로 캐싱이 구현된다. 하지만 GraphQL에선 항상 POST 메소드만을 이용해 요청을 보내기 때문에 각 메소드에 따른 캐싱을 지원받을 수 없다.

  • Query로 인해 요청의 크기가 커질 수 있다.
    고정된 요청과 응답만 필요할 경우에는 REST API보다 요청의 크기가 더 커진다.

  • File 전송 등 Text만으로 하기 힘든 작업들을 처리하기 복잡하다.


출처

더 공부해 볼 것

  • Apollo 엔진의 캐싱과 영속 쿼리? ::TODO::

0개의 댓글