데먕 2020. 3. 8. 14:41

1. Overview

GraphQL is an open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. It allows clients to define the structure of the data required, and the same structure of the data is returned from the server, therefore preventing excessively large amounts of data from being returned, but this has implications for how effective web caching of query results can be. The flexibility and richness of the query language also add complexity that may not be worthwhile for simple APIs. It consists of a type system, query language and execution semantics, static validation, and type introspection.

GraphQL supports reading, writing (mutating), and subscribing to changes to data (realtime updates - most commonly implemented using WebHooks).

GraphQL servers are available for multiple languages, including Haskell, JavaScript, Perl, Python, Ruby, Java, C#, Scala, Go, Elixir, Erlang, PHP, R, and Clojure.

On 9 February 2018, the GraphQL Schema Definition Language (SDL) became part of the specification.

2. Description

2.1 Motivation

GraphQL helps to address some of the more common headaches developers faced when building a REST API - backend application. 

Typical architecture of a web application using REST API

2.1.1 Multiple round trips

You have a singleton REST resource that is too tightly coupled to your client UI. A new requirement comes from your product designer with changes. Newer clients would be requesting data that they essentially don't need anymore. Not that bat when you just start out, but in the long run, it'll be something nagging at you.

2.1.2 Overfetching of data

Wouldn't it be nice if their client receives only the data that ie requires and had requested?

2.1.3 Documenting your API now becomes a thing.

More than just writing down the specs in a formal form so that it can be referenced. How you allow one to discover and explore your API?

2.2 What is GraphQL

A GraphQL query is a string interpreted by a server that returns data in a specified format.

3. Reference

aws.amazon.com/ko/appsync/

tech.kakao.com/2019/08/01/graphql-basic/

https://medium.com/@FourwingsY/graphql%EC%9D%84-%EC%98%A4%ED%95%B4%ED%95%98%EB%8B%A4-3216f404134

https://graphql.org/

https://en.wikipedia.org/wiki/GraphQL

https://www.youtube.com/watch?v=6H7-3_Wgwu4