REST vs GraphQL

이연중·2021년 12월 26일
0

BASIC

목록 보기
4/4


최근 facebook에서 개발한 GraphQL이라는 API 쿼리 언어를 접하고 한번 공부해보기로 했다.
GraphQL에 대해 학습을 하기 전 REST와 다른점은 무엇인지에 대해 궁금해져 그 부분들을 먼저 짚고 시작해보려 한다.

공통점


  1. 자원에 ID를 표기해 구분할 수 있음
  2. 응답으로 JSON 데이터를 받음
  3. 해당 자원을 읽는 행위인지 쓰는 행위인지에 대한 구분이 있음
  4. 요청이 서버측의 특정 함수에 매핑됨

차이점


자원의 정보와 자원에 대한 행위

REST는 한 URL에 자원의 정보와 자원에 대한 행위(HTTP Method)가 묶여 있음
GET /books/1

GraphQL은 자원의 정보와 행위가 분리되어 있음

  //자원의 정보
  type Book {
  	id: ID
    	title: String
    	published: Date
   		price: String
    	author: Author
  }
  type Author {
    	id: ID
    	firstName: String
    	lastName: String
    	books: [Book]
  }
  //자원에 대한 행위
  type Query {
    	book(id: ID!): Book
    	author(id: ID!): Author
  }
  ```

자원의 종류와 양에 대한 결정

REST는 서버에서 정의

GraphQL은 필요한 자원의 종류와 양을 클라이언트에서 정의


요청 형식

REST는 GET /books/:id, GET /authors/:id과 같이 API가 접근할 수 있는 자원의 정보가 리스트로 되어 있는 linear 형식

GraphQL은 자원의 정보 및 자원에 대한 행위를 URL에 표기하지 않고 GraphQL schema에 표기

//Query- 조회
type Query {
  book(id: ID!): Book
  author(id: ID!): Author
}
//Mutation- 수정(삽입, 삭제, 변경)
type Mutation {
  addComment(input: AddCommentInput): Comment
}

type Book { ... }
type Author { ... }
type Comment { ... }
input AddCommentInput { ... }

complex resources

REST는 복잡한 관계로 얽힌 자원들에 대한 정보를 여러 요청으로 얻음

GraphQL은 한번의 요청으로 복잡한 관계로 얽혀있는 자원들에 대한 정보를 얻을 수 있음


handler와 resolver

REST에서는 하나의 요청 당 하나의 handler 함수를 호출하지만,

GrapghQL에서는 하나의 쿼리로 많은 resolvers를 호출해 여러 자원에 접근한 응답을 얻을 수 있음


결론


REST와 GraphQL의 동작 과정들은 유사하다.

결국, 근간은 원하는 자원에 접근해서 원하는 응답을 받는데 있기 때문이다.


차이점 중에 가장 핵심인 부분은 GraphQL은 한번의 요청으로 여러 자원에 대한 정보를 얻을 수 있다는 것이다.

이로 인해 API를 설계할 때, 여러 엔드 포인트를 정의할 필요가 없어지고, 클라이언트는 필요한 데이터만 얻을 수 있게 해주어 개발의 효율성과 더불어 많은 것들을 절약할 수 있게 해준다.


아직은 REST에 비해 reference와 tool 등이 적지만, 유용하고 배워봄직하다는 것은 틀림없다.


++ GQL 사용해보면서 느낀점 쓰기. GQL과 REST의 사용 시기 구분하기(언제 GQL이 유리하고, 언제 REST가 유리한지)

참고

https://www.apollographql.com/blog/graphql/basics/graphql-vs-rest/

profile
Always's Archives

0개의 댓글