일단 알아둬야할 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 의 조건을 간략히는 만족하게 된다.
-
글 관련 API = /posts
-
글 작성 = POST /posts
-
글 수정 = PATCH /posts/[postid]
-
글 삭제 = DELETE /posts/[postid]
-
id와 posts , follower의 정보를 하나씩 가져오는 예시이다.
+ ) ResrAPI의 단점
REST를 사용하면 데이터를 불러오기 위하여 위와같이 각각의 엔드포인트들에 3번의 요청을 보내야 한다.
게다가 필요없는 정보까지 가져오게 됨으로써 데이터를 과하게 불러오게(Overfetch) 된다.
GraphQL
GraphQL 은 Server API 를 구성하기 위해 Facebook 에서 만든 Query Language 이다.
Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종이다.
GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.
- HTTP 요청의 횟수를 줄일 수 있다.
- RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.
- RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
- HTTP 응답의 Size 를 줄일 수 있다.
- RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다.
반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.
- RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다.
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
'Web' 카테고리의 다른 글
Base64 간단정리 + Base64 이미지 html,css,JS로 사용하기 (0) | 2021.06.08 |
---|---|
URL, URN 그리고 URI (0) | 2020.09.11 |
브라우저의 동작원리 (0) | 2020.09.10 |