GraphQL - 簡介



GraphQL 是一種由 Facebook 開發的開源伺服器端技術,用於最佳化 RESTful API 呼叫。它是一個執行引擎和資料查詢語言。本章我們將討論使用 GraphQL 的優勢。

為什麼選擇 GraphQL

RESTful API 遵循清晰且結構良好的資源導向方法。但是,當資料變得更復雜時,路由會變得更長。有時無法透過單個請求獲取資料。這就是 GraphQL 發揮作用的地方。GraphQL 以圖形的形式構建資料,並具有強大的查詢語法,用於遍歷、檢索和修改資料。

以下是使用 GraphQL 查詢語言的優勢:

索取所需內容 - 並獲取它

向您的 API 傳送 GraphQL 查詢,並準確獲取所需內容。GraphQL 查詢始終返回可預測的結果。使用 GraphQL 的應用程式快速且穩定。與 RESTful 服務不同,這些應用程式可以限制應從伺服器獲取的資料。

以下示例將幫助您更好地理解這一點:

讓我們考慮一個具有屬性 `id`、`firstName`、`lastName` 和 `collegeName` 的業務物件 *學生*。假設一個移動應用程式只需要獲取 `firstName` 和 `id`。如果我們設計一個像 `/api/v1/students` 這樣的 REST 端點,它最終會為 *學生* 物件的所有欄位獲取資料。這意味著 RESTful 服務過度獲取了資料。這個問題可以使用 GraphQL 來解決。

考慮以下 GraphQL 查詢:

{
   students {
      id
      firstName
   }
}

這將僅返回 `id` 和 `firstname` 欄位的值。查詢不會為學生物件的其它屬性獲取值。上面所示查詢的響應如下所示:

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim"
         },
         {
            "id": "S1002",
            "firstName": "Kannan"
         }
      ]
   }
}

單個請求獲取多個資源

GraphQL 查詢有助於平滑地檢索關聯的業務物件,而典型的 REST API 需要從多個 URL 載入。GraphQL API 在單個請求中獲取應用程式所需的所有資料。即使在緩慢的行動網路連線上,使用 GraphQL 的應用程式也可以很快。

讓我們再考慮一個業務物件 *學院*,它具有屬性:名稱和位置。*學生* 業務物件與學院物件具有關聯關係。如果我們使用 REST API 來獲取學生及其學院的詳細資訊,我們將最終向伺服器發出兩個請求,例如 `/api/v1/students` 和 `/api/v1/colleges`。這將導致每次請求都欠缺資料。因此,移動應用程式被迫向伺服器發出多次呼叫以獲取所需的資料。

但是,移動應用程式可以使用 GraphQL 在單個請求中獲取學生和學院物件的詳細資訊。

以下是一個用於獲取資料的 GraphQL 查詢:

{
   students{
      id
      firstName
      lastName
      college{
         name
         location
      }
   }
}

上述查詢的輸出包含我們請求的那些欄位,如下所示:

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim",
            "lastName": "Mohammad",
            "college": {
               "name": "CUSAT",
               "location": "Kerala"
            }
         },
         
         {
            "id": "S1002",
            "firstName": "Kannan",
            "lastName": "Sudhakaran",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         },
         
         {
            "id": "S1003",
            "firstName": "Kiran",
            "lastName": "Panigrahi",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         }
      ]
   }
}

使用型別系統描述可能性

GraphQL 是強型別的,查詢基於欄位及其關聯的資料型別。如果 GraphQL 查詢中存在型別不匹配,伺服器應用程式將返回清晰且有用的錯誤訊息。這有助於客戶端應用程式平滑地除錯和輕鬆檢測錯誤。GraphQL 還提供客戶端庫,可以幫助減少顯式資料轉換和解析。

以下是 *學生* 和 *學院* 資料型別的示例:

type Query {
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}

type College {
   id:ID!
   name:String
   location:String
   rating:Float
   students:[Student]
}

使用強大的開發者工具更快地開發

GraphQL 提供豐富的開發者工具來編寫文件和測試查詢。GraphiQL 是一個優秀的工具,它生成查詢及其模式的文件。它還提供查詢編輯器來測試 GraphQL API,並在構建查詢時提供智慧程式碼補全功能。

廣告
© . All rights reserved.