天天看點

GraphQL 快速入門【1】簡介為什麼使用 GraphQL

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

GraphQL 快速入門【1】簡介為什麼使用 GraphQL

    GraphQL 是 Facebook 開發的一種開源伺服器端技術,用于優化 RESTful API 調用。它是一種執行引擎和一種資料查詢語言。在本章中,我們将讨論使用 GraphQL 的優勢。

    RESTful API 遵循清晰且結構良好的面向資源的方法。但是,當資料變得更複雜時,路由會變得更長。有時無法通過單個請求擷取資料。這就是 GraphQL 派上用場的地方。GraphQL 以圖的形式建構資料,其強大的查詢文法用于周遊、檢索和修改資料。

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

    向您的 API 發送 GraphQL 查詢并準确擷取您需要的内容。GraphQL 查詢總是傳回可預測的結果。使用 GraphQL 的應用程式且穩定。與 Restful 服務不同,這些應用程式可以限制應該從伺服器擷取的資料。

    以下示例将幫助您更好地了解這一點:

    讓我們考慮一個具有屬性 id、firstName、lastName 和 CollegeName 的業務對象 Student。假設一個移動應用隻需要擷取 firstName 和 id。 如果我們設計一個像 /api/v1/students 這樣的 REST 端點,它最終會為一個 Student 對象的所有字段擷取資料。這意味着,資料被 RESTful 服務過度擷取。 這個問題可以通過使用 GraphQL 來解決。

    考慮下面給出的 GraphQL 查詢:

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

    GraphQL 查詢有助于順利檢索關聯的業務對象,而典型的 REST API 需要從多個 URL 加載。GraphQL API 在單個請求中擷取您的應用程式所需的所有資料。即使在緩慢的移動網絡連接配接上,使用 GraphQL 的應用程式也可以很快。

    讓我們再考慮一個業務對象 College,它具有以下屬性:名稱和位置。 Student 業務對象與 College 對象具有關聯關系。如果我們使用 REST API 來擷取學生及其大學的詳細資訊,我們最終将向伺服器發出兩個請求,如 /api/v1/students 和 /api/v1/colleges。這将導緻每個請求的資料擷取不足。 是以,移動應用被迫多次調用伺服器以擷取所需的資料。

    但是,移動應用可以使用 GraphQL 在單個請求中擷取 Student 和 College 對象的詳細資訊。

    以下是用于擷取資料的 GraphQL 查詢:

    上述查詢的輸出正好包含我們要求的那些字段,如下所示:

    GraphQL 是強類型的,查詢基于字段及其關聯的資料類型。如果 GraphQL 查詢中存在類型不比對,伺服器應用程式會傳回清晰且有用的錯誤消息。這有助于用戶端應用順利調試和輕松檢測錯誤。 GraphQL 還提供了用戶端庫,可以幫助減少顯式資料轉換和解析。

    下面給出了 Student 和 College 資料類型的示例:

    GraphQL 為文檔和測試查詢提供了豐富的開發工具。GraphiQL 是一個出色的工具,可以生成查詢及其模式的文檔。 它還提供了一個查詢編輯器,用于在建構查詢時測試 GraphQL API 和智能代碼完成功能。

繼續閱讀