GraphQL 是一個(gè)由Facebook提出的 應(yīng)用層查詢語言. 使用 GraphQL, 你可以基于圖模式定義你的后端. 然后客戶端就可以請求所需要的數(shù)據(jù)集。
因此, 你不必因?yàn)榭蛻舳藬?shù)據(jù)需求的變更而改變你的后端. 這解決了管理REST API中的最大的問題.
GraphQL同樣能夠讓客戶端程序高效地批量獲取數(shù)據(jù). 例如, 看一看下面這個(gè)GraphQL請求:
{
latestPost {
_id,
title,
content,
author {
name
},
comments {
content,
author {
name
}
}
}
}
這個(gè) GraphQL 請求獲取了一篇博客文章和對應(yīng)評(píng)論與作者信息的數(shù)據(jù). 下面是請求的返回結(jié)果:
{
"data": {
"latestPost": {
"_id": "03390abb5570ce03ae524397d215713b",
"title": "New Feature: Tracking Error Status with Kadira",
"content": "Here is a common feedback we received from our users ...",
"author": {
"name": "Pahan Sarathchandra"
},
"comments": [
{
"content": "This is a very good blog post",
"author": {
"name": "Arunoda Susiripala"
}
},
{
"content": "Keep up the good work",
"author": {
"name": "Kasun Indi"
}
}
]
}
}
}
如果你使用的是REST的話烛卧,你需要調(diào)用多個(gè)REST API的請求才能獲取這些信息女责。
GraphQL是一個(gè)規(guī)范
因此, 它可以用于任何平臺(tái)或語言. 它有一個(gè)參考的實(shí)現(xiàn) JavaScript, 由Facebook維護(hù). 還有許多社區(qū)維護(hù)的實(shí)現(xiàn)有許多種語言.
這里是它的規(guī)范:http://facebook.github.io/graphql/
一旦你使用了GraphQL咽白,你會(huì)想在每個(gè)項(xiàng)目中使用它的数冬。