본문 바로가기

Web

RESTful API와 GraphQL

728x90
반응형

 

 

일단 알아둬야할 Server API란 ?

적절한 요청을 하였을 때, 그에 맞는 응답을 되돌려주는 창구 (Endpoint) 를 Web 을 통해 노출한 것을 말한다.

이 Server API 를 만드는 방법론 중 하나로 REST 라는 것이 있으며,
이 방법론은 많은 Server API 들을 구성하기 위해 사용되어왔고, 또 현재도 많이 사용되고 있다.

 

REST 와 RESTful

모든 Resource (자료, User, …) 들을 하나의 Endpoint 에 연결해놓고,
각 Endpoint 는 그 Resource 와 관련된 내용만 관리하게 하자는 방법론이다.

여러 Resource를 stateless 클라이언트 서버 프로토콜중에서 HTTP URI 로 표현하고

그 리소스에 대한 행위를 HTTP method로 정의한다.

 

 

예시로 어떤 API 가 Community site 용 API 이며,
이 API 를 사용해 사용자들이 글을 작성/수정/삭제 할 수 있고,
각 글에 댓글을 작성/수정/삭제할 수 있다고 해보자.

이때, API 의 Endpoint 를 다음과 같이 구성하면 REST 의 조건을 간략히는 만족하게 된다.

 

  1. 글 관련 API = /posts

    1. 글 작성 = POST /posts

    2. 글 수정 = PATCH /posts/[postid]

    3. 글 삭제 = DELETE /posts/[postid]

id와 posts , follower의 정보를 하나씩 가져오는 예시이다.

 

RestAPI 예시

+ ) ResrAPI의 단점

REST를 사용하면 데이터를 불러오기 위하여 위와같이 각각의 엔드포인트들에 3번의 요청을 보내야 한다.
게다가 필요없는 정보까지 가져오게 됨으로써 데이터를 과하게 불러오게(Overfetch) 된다.

 

GraphQL

GraphQL 은 Server API 를 구성하기 위해 Facebook 에서 만든 Query Language 이다.

Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종이다.
GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.

 

  1. HTTP 요청의 횟수를 줄일 수 있다.
    • RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
      반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.
  2. HTTP 응답의 Size 를 줄일 수 있다.
    • RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다.
      반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.

 

GraphQL을 사용하면 클라이언트에게 필요한 데이터를 쿼리에 정확히 특정해줄 수 있다.

버로부터 반환된 데이터의 구조가 쿼리에 정의된 중첩 구조를 정확히 따르고 있다는 점에 유의

 

+) GraphQL 은 왜 탄생해야했는가?

다시말해, REST 방법론이 있는데도 새로운 언어인 GraphQL 이 탄생해야했던 배경은 무엇인가?

  • RESTful API 로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 힘들었다.
  • 예로, iOS 와 Android 에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API 를 구현하는 것이 힘들었다.

이 때문에 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고,
보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query language 를 만들게 되었다.
이것이 GraphQL 이다.

 

 

 

 

더 많은 내용은 아래 참고

www.holaxprogramming.com/2018/01/20/graphql-vs-restful-api/

velog.io/@bclef25/REST-API-%EC%99%80-graphQL

velog.io/@cadenzah/graphql-02-better-rest

 

 

728x90
반응형

'Web' 카테고리의 다른 글

Base64 간단정리 + Base64 이미지 html,css,JS로 사용하기  (0) 2021.06.08
URL, URN 그리고 URI  (0) 2020.09.11
브라우저의 동작원리  (0) 2020.09.10