帶 Drupal 8 的 GraphQL:你需要知道的指南(有例子!)

已發表: 2019-12-17

GraphQL 在 HTTP 中與 Drupal 對話,輸出比以往任何時候都更加結構化!

如今,出色的客戶體驗始於出色的內容。 隨處可用的內容。 通過 Drupal 8 的 API-first 計劃,由 Drupal 管理的內容可以很容易地被其他系統通過 HTTP 使用。 REST(Representational State Transfer)為 API 提供了設計標準。 然而,隨著客戶端應用程序變得越來越複雜和具有挑戰性,開發人員需要一個更現代、更有效的解決方案。

使用 drupal8 的 GraphQL



GraphQL 誕生於對更靈活、更強大的客戶端-服務器交互的需求。 它是一種複雜的查詢語言和執行機器。 2012 年,Facebook 為其創建了規範,其中描述了其功能和無頭應用程序數據模型的要求。

什麼是 GraphQL?

GraphQL 是 API 的自適應標準,並提供運行時來完成這些查詢。 GraphQL 為您的 API 中的信息提供了完整且合理的詳細信息。 它的開發理念是“詢問你需要的東西,然後得到它”。 它使客戶端能夠從 API 獲取他們需要的確切響應,僅此而已 - 僅此而已。

GraphQL 優勢

將 GraphQL 用於 Drupal 的眾多優勢中幾乎沒有 -

  1. 更快的前端開發

    無需等待新的後端端點即可快速關注應用程序。 通過獲取所需形狀的數據來改進數據獲取和代碼維護。
  2. 詢問你需要的東西並得到它

    它提供了客戶要求的確切響應。 它總是返回可預測的結果。 使用 GraphQL 的應用程序也很穩定,因為應用程序控制它獲取的數據,而不是服務器。
  3. 使用您現有的數據

    GraphQL 可以與任何現有基礎設施一起使用,例如 REST、SOAP 或現有數據庫,或其他任何東西。 它允許您在單個請求中查詢所有數據,並為您提供清晰的可預測響應。
  4. 更少的字節和往返次數

    使用 GraphQL 可以使用單個查詢獲取所有必需的數據。 它使
    應用更快。
drupal-graphql

GraphQL 與 Drupal 8

REST 與 JSON:API 與 GraphQL

如果我們按照請求效率來比較這三個,JSON:API 和 GraphQL 是非常優秀的。 因為在單個請求中 JSON:API 和 GraphQl 可以提供所有需要的響應。 在 JSON:API 的情況下,有時我們必須定制響應,但是當涉及到 GraphQL 時,它只提供我們需要的服務。 與這些相比,REST 更慢,因為需要多個請求來滿足共同需求。

在操作簡單性和實現方面,REST 是最簡單的,它已經存在了很長時間了。 JSON:API 也與 CDN 和反向代理一起開箱即用。 對於 GraphQL,需要額外的基礎設施,並且需要客戶端庫來實現它。

與 GraphQL 相比,在 REST 和 JSON:API 中使用 Web 緩存更容易。 在 GraphQL 中,只有一個端點(大多數情況下是 HTTP POST 端點)用於發送所有查詢。 由於每個查詢可能不同,因此很難使用這種類型的緩存。

Drupal GraphQL 規範自動支持您已經實現的更改的批量/批處理操作,而 JSON:API 規範則不支持。 執行批量寫入操作的能力可能很重要。

為 Drupal 8 安裝 GraphQL

Drupal GraphQL 模塊支持所有 GraphQL 規範,可用於構建和公開 GraphQL 模式。 Drupal 8 模塊的最新 alpha 版本在 8.x-4 版本中為 Drupal 模塊提供了使用插件擴展架構的功能。

您可以從這里安裝 Drupal GraphQL 模塊 - https://www.drupal.org/project/graphql
您可以使用 composer 命令安裝。

 作曲家需要“drupal/graphql:^3.0”

它將為您提供兩個模塊GraphQL Core 和 GraphQL 。 您需要啟用這兩個模塊。 您可以使用 drush 啟用它,例如

drush en graphql
drush en graphql_core

使用 Drupal GraphQL 查詢

Drupal GraphQL 模塊提供了一個名為GraphiQL的工具。 它是一個強大的工具,具有交互式 UI,具有自動完成等功能。 使用此工具,您可以運行查詢並獲得輸出。 導航到 - “ /graphql/explorer ”的界面。

你會得到一個看起來像這樣的用戶界面——

GraphQL-UI

GraphiQL 用戶界面

在此 UI 的左側面板上,您可以編寫查詢,而在右側,您將看到以 JSON 格式輸出的結果。 單擊右上角的Docs ,將為您提供可用查詢的文檔。 左下方面板上的查詢變量部分可用於傳遞查詢變量。

例子

1.查詢節點

查詢節點graphql

Drupal GraphQL - 查詢節點

2. 查詢分類

Drupal GraphQL - 查詢分類法

Drupal GraphQL - 查詢分類法


3. 查詢路線

Drupal GraphQL - 查詢路由

Drupal GraphQL - 查詢路由

4. 查詢片段

Drupal GraphQL - 查詢片段

Drupal GraphQL - 查詢片段

5.過濾器

Drupal GraphQL - 過濾器

Drupal GraphQL - 過濾器

6. 帶連詞的過濾器

Drupal GraphQL - 帶連接的過濾器

Drupal GraphQL - 帶連接的過濾器

其他可用的運算符是:

  • 平等的
  • NOT_EQUAL
  • SMALLER_THAN
  • SMALLER_THAN_OR_EQUAL
  • 比...更棒
  • GREATER_THAN_OR_EQUAL
  • NOT_IN
  • 喜歡
  • 不喜歡
  • 之間
  • NOT_BETWEEN
  • 一片空白
  • IS_NOT_NULL

連詞可以有兩個值

  • 或者

您還可以使用來編寫更複雜的查詢。

7.GraphQL 變量

Drupal GraphQL - 變量

Drupal GraphQL - 變量

突變

在 GraphQL 中,mutation 是您想要添加、修改或刪除存儲在服務器上的數據時使用的術語。 在這種情況下,Drupal。 不幸的是,由於 GraphQL 的一些技術要求,該模塊不包括一種開箱即用的執行常見突變的方法。
創建、刪除、更新和文件上傳的示例代碼,可以在這裡找到:https://github.com/drupal-graphql/graphql-examples

示例突變:

Drupal GraphQL - 變異示例

Drupal GraphQL - 變異示例

帶有 Twig 的 Drupal GraphQL

將 Drupal GraphQL 與 Twig 結合使用可以顯著提高您網站的性能。 方法如下 – 當您將數據注入 Twig 模板時,您可以使用單個 API 調用獲取所有需要的數據。 此外,因為客戶端控制他們獲得的數據而不是服務器,所以它使過程更快。

要在 Twig 中使用 Drupal GraphQL,我們需要 GraphQL Twig 模塊。 要下載並啟用它,請使用以下命令:

 作曲家需要 'drupal/graphql_twig:^1.0'
drush en graphql_twig

然後您可以在您的網站中使用 GraphQL 查詢,例如

{#graphql
詢問 {
  管理員:userById(ID:“1”){
    用戶界面
    名稱
  }
  用戶:當前用戶上下文{
    用戶界面
  }
}
#}

您將在 GraphQL 變量中獲得響應數據。