帶 Drupal 8 的 GraphQL:你需要知道的指南(有例子!)
已發表: 2019-12-17GraphQL 在 HTTP 中與 Drupal 對話,輸出比以往任何時候都更加結構化!
如今,出色的客戶體驗始於出色的內容。 隨處可用的內容。 通過 Drupal 8 的 API-first 計劃,由 Drupal 管理的內容可以很容易地被其他系統通過 HTTP 使用。 REST(Representational State Transfer)為 API 提供了設計標準。 然而,隨著客戶端應用程序變得越來越複雜和具有挑戰性,開發人員需要一個更現代、更有效的解決方案。

GraphQL 誕生於對更靈活、更強大的客戶端-服務器交互的需求。 它是一種複雜的查詢語言和執行機器。 2012 年,Facebook 為其創建了規範,其中描述了其功能和無頭應用程序數據模型的要求。
什麼是 GraphQL?
GraphQL 是 API 的自適應標準,並提供運行時來完成這些查詢。 GraphQL 為您的 API 中的信息提供了完整且合理的詳細信息。 它的開發理念是“詢問你需要的東西,然後得到它”。 它使客戶端能夠從 API 獲取他們需要的確切響應,僅此而已 - 僅此而已。
GraphQL 優勢
將 GraphQL 用於 Drupal 的眾多優勢中幾乎沒有 -
- 更快的前端開發
無需等待新的後端端點即可快速關注應用程序。 通過獲取所需形狀的數據來改進數據獲取和代碼維護。 - 詢問你需要的東西並得到它
它提供了客戶要求的確切響應。 它總是返回可預測的結果。 使用 GraphQL 的應用程序也很穩定,因為應用程序控制它獲取的數據,而不是服務器。 - 使用您現有的數據
GraphQL 可以與任何現有基礎設施一起使用,例如 REST、SOAP 或現有數據庫,或其他任何東西。 它允許您在單個請求中查詢所有數據,並為您提供清晰的可預測響應。 - 更少的字節和往返次數
使用 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 ”的界面。
你會得到一個看起來像這樣的用戶界面——

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

Drupal GraphQL - 查詢節點
2. 查詢分類

Drupal GraphQL - 查詢分類法
3. 查詢路線

Drupal GraphQL - 查詢路由
4. 查詢片段

Drupal GraphQL - 查詢片段
5.過濾器

Drupal GraphQL - 過濾器
6. 帶連詞的過濾器

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

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 變量中獲得響應數據。
