GraphQL 之我見

先看個範例(摘自 GraphQL Introduction),這是一個查詢:

{
user(id: 3500401) {
id,
name,
isViewerFriend,
profilePicture(size: 50) {
uri,
width,
height
}
}
}

而這是查詢的結果:

{
"user" : {
"id": 3500401,
"name": "Jing Chen",
"isViewerFriend": true,
"profilePicture": {
"uri": "http://someurl.cdn/pic.jpg",
"width": 50,
"height": 50
}
}
}

GraphQL 是一個 Application-Layer Protocol(像是 RESTful API)的 endpoint,在我看來主要解決的痛點有2個:

  1. 使用 RESTful API 時,Server 主導了資料回傳的結構以及內容。取回來的資料必須由 client 自行轉換成邏輯或是 view 合用的資料結構;有些資料用不著但 server 還是會傳給你,或是 server 回傳的資料有限/有相依性,往往要發好幾個 request 才能拿到所有資料。
    何不一開始就跟 server 說:「嘿,我要這些資料跟他的相依資料,並且請依照以下的結構傳給我。」
  2. 由於資料的結構是由 client 決定的,所以並不會發生 api 改版的悲劇(你要取的資料已經改名/換位置了)。

參考資料

GraphQL 官網
GraphQL Introduction
Lee Byron — Exploring GraphQL at react-europe 2015
Joseph Savona — Relay: An Application Framework For React at react-europe 2015

Like what you read? Give Jas Chen a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.