Github API v4: GraphQL

GraphQL勢不可擋,有着即將取代REST的API架構。主要好處就是“你要什麼,api就給你什麼。而不是你要不要都給你返回一大堆沒用的。”

而且:GraphQL只需要一個網址URL!

https://api.github.com/graphql

不像REST,你需要各種各有的URL去申請不同的內容。GraphQL一個URL全夠了。
而且一般不是很複雜的情況下,你幾乎只要request一次這個地址,就能拿到你全部需要的數據了(能按照你的需求返回給你各種嵌套的、格式化的數據)

網上看了很多文章解釋之後發現還是什麼都沒懂。所以這篇分享不打算按照常規路線,先用一大堆結構圖、語法給你弄懵。這裏我想先讓它運作起來,有個"Hello world",然後再去深究背後的邏輯和語法。

初試GraphQL

要說去了解一個API,最好的方式就是用PostmanInsomnia這種REST客戶端去連接玩耍了,不需要任何編程,只是手動點一點就ok。

”有意思“的是,因爲GraphQL太新潮,這兩大客戶端對它的支持各不相同,使用的參數、格式也大相徑庭。
下面通過最簡單的案例總結一下。

Insomnia 訪問Github GraphQL 的案例

Insomnia對GraphQL的支持相當好,可以說已經領先別人一步。
以下爲操作步驟:

  • 新建request, 設置爲POST方式訪問https://api.github.com/graphql
  • 申請授權認證:

Github的API v4不能陌生訪問,必須使用自己的賬號申請一個token密碼串,然後在每次連接API時使用。
操作很簡單,登錄Github後,找到Settings -> Developer settings -> Personal access tokens -> Generate new token,生成一個新的token授權密碼串,複製保存到本地備份。

  • 添加授權認證:

在Insomnia軟件裏,有兩種授權方式都可以達到同樣認證效果:明文的Query參數裏設置(即在url後面加上參數),或者Header表頭裏設置。
Query裏設置的話,格式爲:?access_token=xxxxxxxxxxx
Header裏設置的話,格式是:名稱爲Authorization,值爲token xxxxxxxxxx

  • 在欄目裏面的Body位置選擇GraphQL格式:

image

  • 輸入Github指定格式的查詢語句(看似JSON格式實則不是):
query {
  viewer {
    login
  }
}
  • 點擊Send發送請求,如果一切正常,則會得到查詢的返回值:

image

Postman訪問GraphQL失敗

不像Insomnia,Postman暫時沒有支持GraphQL的選項,但是可以通過類似的操作達到一樣的效果。流程是一樣的,只是每個地方設置格式都不同,這也是我不斷嘗試才找到的總結方案(可惜網上相關教程太少)。

這裏只說不同的地方吧:

  • 授權比Insomnia多一種方式,可以在Authorization欄目裏面直接選OAuth 2.0然後輸入token密碼串。
  • 最重要的是Body部分,查詢語句完全不能使用Github指定的格式。只能選擇Body格式爲Raw -> JSON(application/json)。然後加上查詢語句,格式如下(必須完全符合JSON語法)
{ 
  "query": "query {viewer { login } }"
}

image

GitHub GraphQL Explorer

這個是Github製作的網頁練習機,免去了一切授權等處理,讓你只專注於查詢語句的調用練習。
每次點擊運行,都會實時返回對應的數據。
如果記不住的、不懂的,還可以點擊旁邊的Docs,會顯示出一個搜索框,顯示你需要的內容的文檔。

GraphQL API Explorer | GitHub Developer Guide

image

常用查詢結構

下面展示一些我測試過的查詢結構,希望能起到幫助作用。
爲了增強閱讀性,節省文字長度,返回值就先不粘上來了。而且返回值幾乎就是查詢語句的結構,沒什麼特別新鮮的。

查詢指定的repo中的issues和comments

其中指定了某一個repo(通過owner和name指定),也指定了某一條issue(通過number指定),並要求返回最近的10條comments。

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章