带 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 变量中获得响应数据。
