博客 / 詳情

返回

GraphQL 快速入門【1】簡介

【注】本文節譯自:GraphQL - Quick Guide (tutorialspoint.com)

    GraphQL 是 Facebook 開發的一種開源服務器端技術,用於優化 RESTful API 調用。它是一種執行引擎和一種數據查詢語言。在本章中,我們將討論使用 GraphQL 的優勢。

為什麼使用 GraphQL

    RESTful API 遵循清晰且結構良好的面向資源的方法。但是,當數據變得更復雜時,路由會變得更長。有時無法通過單個請求獲取數據。這就是 GraphQL 派上用場的地方。GraphQL 以圖的形式構建數據,其強大的查詢語法用於遍歷、檢索和修改數據。
    以下是使用 GraphQL 查詢語言的優勢:

詢問你想要的 - 並得到它

    向您的 API 發送 GraphQL 查詢並準確獲取您需要的內容。GraphQL 查詢總是返回可預測的結果。使用 GraphQL 的應用程序且穩定。與 Restful 服務不同,這些應用程序可以限制應該從服務器獲取的數據。
    以下示例將幫助您更好地理解這一點:
    讓我們考慮一個具有屬性 idfirstNamelastNameCollegeName 的業務對象 Student。假設一個移動應用只需要獲取 firstNameid。 如果我們設計一個像 /api/v1/students 這樣的 REST 端點,它最終會為一個 Student 對象的所有字段獲取數據。這意味着,數據被 RESTful 服務過度獲取。 這個問題可以通過使用 GraphQL 來解決。
    考慮下面給出的 GraphQL 查詢:

{
  {
    id
    firstName
  }
}

    這將僅返回 id 和 firstname 字段的值。該查詢不會獲取學生對象的其他屬性的值。上面説明的查詢的響應如下所示:

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

在單個請求中獲取多個資源

    GraphQL 查詢有助於順利檢索關聯的業務對象,而典型的 REST API 需要從多個 URL 加載。GraphQL API 在單個請求中獲取您的應用程序所需的所有數據。即使在緩慢的移動網絡連接上,使用 GraphQL 的應用程序也可以很快。
    讓我們再考慮一個業務對象 College,它具有以下屬性:名稱和位置。 Student 業務對象與 College 對象具有關聯關係。如果我們使用 REST API 來獲取學生及其大學的詳細信息,我們最終將向服務器發出兩個請求,如 /api/v1/students/api/v1/colleges。這將導致每個請求的數據獲取不足。 因此,移動應用被迫多次調用服務器以獲取所需的數據。
    但是,移動應用可以使用 GraphQL 在單個請求中獲取 Student 和 College 對象的詳細信息。
    以下是用於獲取數據的 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 還提供了客户端庫,可以幫助減少顯式數據轉換和解析。
    下面給出了 StudentCollege 數據類型的示例:

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 和智能代碼完成功能。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.