GraphQL入門:GraphQL與REST區別的不同舉例 - Sithira

banq發表於2020-05-20

當使用REST API標準時, Facebook 注意到其新聞源需要呼叫多個API端點才能檢索所需的所有資料。因此,他們正在尋找一種以可靠的方式在移動裝置上以良好效能載入新聞源的方法。

GraphQL是由於這項努力而發明的。它是一種“新查詢語言,為REST提供了更有效和強大的替代方法”。它是可以用任何程式語言實現的規範。

一個簡單的應用程式需要在螢幕上顯示使用者名稱,建立的帖子以及使用者的最後3個關注者。

如果我們通過REST執行此任務,則可能需要3個端點,例如:

  1. GET /users/{id}
  2. GET /users/{id}/posts
  3. GET /users/{id}/followers

GraphQL沒有多個端點,而是公開了一個端點,並使用它訪問伺服器上可用的資料。從GraphQL返回的資料的結構是不固定的。客戶端從伺服器發出的資料請求是通過query,類似於REST中的GET呼叫

query {
   User(id: "ek33orffi4") {
    name
    age
    posts {
        title
    }
    followers(last: 3){
        name
    }
  }
}

該查詢將產生使用者的名稱,建立的帖子標題和最後3個關注者。在此示例中,“query” 根欄位和資料之後是有效負載。該查詢以下面所述的JSON格式返回響應。

{
  "data": {
    "User":{
      "name": "Sithira",
      "posts":[

        {"title" : "GraphQL history"}   ,
        {"title" : "How to use work form home effectively"}

      ],
      "followers":[

        {"name" : "Kate"},
        {"name" : "Jane"},
        {"name" : "David"}

      ]
    }
  }
}

GraphQL如何以簡單的方式工作?

  1. 客戶端傳送查詢請求以從伺服器檢索所有人員的姓名。
  2. 然後,伺服器使用模式驗證請求,並根據合同驗證“查詢型別”和“人員型別”中的資料。
  3. 如果通過了驗證,則伺服器將讀取查詢的有效負載並從資料來源(資料庫,記憶體中)中獲取所需的資訊,並將響應以JSON格式返回給客戶端。解析程式負責為每個請求的欄位檢索正確的資料。

點選標題見原文,包含如何自動化測試GraphQL

相關文章