GraphQL學習:Github GraphQL API v4初探

查看GithubAPI的時候,發現github API升級成了V4,而且叫GraphQL API v4。不由大吃一驚,這是個什麼東東。git

什麼是GraphQL

GraphQL(Graph Query Language):GraphQL 是一個用於 API 的查詢語言,是一個使用基於類型系統來執行查詢的服務端運行時(類型系統由你的數據定義)。github

GraphQL是一門語言,專門用於API查詢。能夠類比到SQL,這種類型的語言學名叫DSL(domain-specific language),譯做領域專用語言json

爲何Github選用GraphQL呢?由於GraphQL具備如下好處:dom

  • 更大的靈活性
  • 精肯定義所需數據的能力(GraphQL擁有強類型)
  • 僅僅會返回你須要的數據(避免數據冗餘)
  • GraphQL容許您經過一次調用替換多個REST請求以獲取指定的數據

放一張來自圖說明下工做過程:ide

image

看起來與本來的REST API沒什麼兩樣。post

是的,大體的工做流程就是如此,不過GraphQL做爲一門語言,其中有許多的概念和語法。可是我不想純粹作官方文檔的copyer,而是做爲官方文檔的一個導學,具體的概念和語法能夠去學習

GraphQL中文網學習。網站

相信你也不愛一會兒看到超多陌生概念,咱們還行邊用邊學吧ui

初探

github提供了GraphQL Explorer來輔助GraphQL學習spa

一個小小案例

打開GraphQL Explorer這裏咱們先來運行下面的代碼:

query { 
  viewer { 
    login
  }
}
複製代碼

這段代碼能夠查詢你github的用戶名,注意,請先登陸。

我運行的結果:

{
  "data": {
    "viewer": {
      "login": "smarxpan"
    }
  }
}
複製代碼

這裏你可能會產生疑惑,爲何接口能夠這樣請求,到底發生了什麼魔法?

打開抓包軟件,咱們來抓個包看看。

上面的請求,實際上發送的內容仍舊是個json:

{
	"query": "query { \n  viewer { \n    login\n  }\n}",
	"variables": {}
}
複製代碼

這裏沒有什麼魔法,咱們看到那段代碼的內容做爲query參數的值發送給了服務端,服務端按照語法對其進行解析,而後返回給咱們須要的值。

小小案例的具體解釋

query { 
  viewer { 
    login
  }
}
複製代碼

這一小段的第一句:query

GraphQL中有兩種操做:query和mutation。query表明查詢,mutation是變動。查詢就是請求數據,而變動,對應REST API的POST/PATCH/DELETE。

這兩種操做使用的請求方式均爲post,get請求在GraphQL不經常使用。

query的結構相似:

query {
  JSON objects to return
}
複製代碼

其內部定義的是要返回數據的json結構。

學習和使用指引

最佳的示例固然是《Github GraphQL Guides》,其中有示例、可運行,裏面的每段代碼均可點擊到explorer裏運行。

語法學習仍是推薦GraphQL中文網:《GraphQL 入門》

還有一篇博客我以爲特別棒,是Leetcode工做的一位大神的《阻礙你使用 GraphQL 的十個問題》

而真正使用到工做中,固然少不了庫的使用

GraphQL服務端庫

GraphQL客戶端庫

目前主流的開發語言均有具體實現,取決於你使用的是哪種語言,選擇本身的開發庫用起來。

結語

新技術無疑是讓人興奮的,GraphQL確實解決了很多痛點,若是項目沒什麼歷史包袱能夠搞一搞。Github做爲世界上最大的同性交友網站,其在API上使用該語言相信會帶動業界的進步,學就完了。

相關文章
相關標籤/搜索