创建 API
创建 API创建持久化 Query

创建持久化 Query

持久化 Query 是 GraphQL 与 REST API 的结合:它是一个普通的 GraphQL query,发布在站点上并通过独立的 URL 访问,类似于 REST 端点。

例如,我们可以通过以下持久化 Query 对外暴露网站数据:

  • /graphql-query/homepage-posts
  • /graphql-query/user-widget
  • /graphql-query/post-content(传入文章 ID 执行:?post=1
  • /graphql-query/post-content/es(将文章内容翻译为西班牙语)
  • 其他

持久化 Query 编辑器

执行持久化 Query

持久化 Query 发布后,即可通过其固定链接执行。

由于持久化 Query 通过 GET 方式访问,可直接在浏览器中执行,并以 JSON 格式获取所请求的数据:

在浏览器中执行持久化 Query

在应用程序中执行持久化 Query

请参阅指南「从客户端连接到 GraphQL 服务器」中的操作说明。

访问所有持久化 Query

点击插件菜单中的"Persisted Queries",即可显示已创建的所有持久化 Query 列表:

管理后台的持久化 Query 列表
管理后台的持久化 Query 列表

创建新的持久化 Query

点击"Add New GraphQL persisted query"按钮,打开 WordPress 编辑器:

创建持久化 Query

输入标题并确认固定链接符合预期,然后填写 GraphQL query,选择 schema 配置并调整选项。准备就绪后,点击 Publish 按钮,固定链接即成为持久化 Query 的端点。

端点(及源码)的链接显示在"Persisted Query Endpoint Overview"侧边栏面板中:

Persisted Query Endpoint Overview

默认情况下,持久化 Query 的端点路径为 /graphql-query/,该值可在设置中修改:

持久化 Query 设置
持久化 Query 设置

Query 编辑器

编辑器中的 GraphiQL 客户端是输入 GraphQL 持久化 Query 的地方:

持久化 Query 的 GraphiQL 客户端

编辑器附带 Explorer 插件,可通过点击左侧面板中的字段来组合 query。点击"Run"按钮执行 query,预览响应结果:

使用 Explorer 组合持久化 Query

Schema 配置

持久化 Query 中所请求字段的访问权限由 schema 配置定义。

因此,我们需要创建 schema 配置,然后从下拉菜单中选择(或选择"无"或默认配置):

选择 schema 配置

私有持久化 Query

将持久化 Query 的状态设为 private 后,该端点仅管理员用户可访问。这可防止数据被意外共享给无权访问的用户。

例如,我们可以创建私有持久化 Query 来辅助应用管理,如获取数据以生成指标报告。

私有持久化 Query

密码保护的持久化 Query

如果我们为特定客户创建持久化 Query,可以为其设置密码,以提供额外的安全保障,确保只有该客户才能访问端点。

密码保护的持久化 Query

首次访问密码保护的持久化 Query 时,会看到一个要求输入密码的界面:

密码保护的持久化 Query:首次访问

输入并验证密码后,用户方可访问目标端点。

通过 URL 参数使持久化 Query 动态化

执行持久化 Query 时,可通过 URL 参数(使用变量名)为每个变量设置值。若启用了"Do URL params override variables?"选项,则 URL 参数优先;否则,变量字典中定义的值优先(如有)。

例如,在此 query 中,结果数量通过变量 $limit 控制,默认值为 3:

在持久化 Query 中使用变量

执行此持久化 Query 时,传入 ?limit=5 将使 query 返回 5 条结果:

覆盖持久化 Query 中变量的值

创建持久化 Query 层级

请阅读创建 API 层级的相关说明。

禁用持久化 Query

在选项中将"Enabled"设为 false 即可禁用持久化 Query。

当持久化 Query 作为 API 层级的一部分,为子持久化 Query 提供公共行为,但自身无需被执行时,此功能非常有用。

为持久化 Query 添加描述

使用文档设置面板中的"Excerpt"字段,为持久化 Query 添加描述。

更多信息请参阅指南「为 API 添加描述」。

在发布前测试持久化 Query

状态为 draftpending 的持久化 Query 仅对 schema 编辑器用户可用。

因此,我们可以创建持久化 Query,分配 Schema 配置,将其发布为 draftpending,然后进行测试(例如:验证其访问控制规则是否合适)。

审核通过后,再将状态设为 publish,使持久化 Query 对所有人可用。

查看源码

在端点后附加 ?view=source,即可显示持久化 Query 的配置(前提是用户已登录且其角色具有访问权限):

持久化 Query 的源码


WordPress 编辑器中的配置

以下是编辑器正文中的输入项:

输入项说明
标题持久化 Query 的标题
GraphiQL 客户端用于编写和执行 GraphQL query 的编辑器:
  • 在文本框中编写 query
  • 在 query 中声明变量,并在底部的变量输入框中声明其值
  • 点击"Run"按钮执行 query
  • 在右侧输入框中获取结果
  • 点击"Docs"查看 schema 信息
Explorer(仅在模块 GraphiQL Explorer 启用时显示)允许通过点击字段将其自动添加到 query 中
Schema 配置从下拉菜单中选择适用于持久化 Query 的 schema 配置,或以下选项之一:
  • "Default":使用插件设置中所选的 schema 配置
  • "None":持久化 Query 不受任何约束
  • "Inherit from parent":使用与父持久化 Query 相同的 schema 配置。
    此选项在模块 API Hierarchy 启用且持久化 Query 拥有父 query(在文档设置中选择)时可用
选项自定义持久化 Query 的行为:
  • Enabled?: 持久化 Query 是否启用。
    当其为 API 层级中的父 query 时,禁用它非常有用
  • Do URL params override variables?: 允许 URL 参数覆盖 GraphiQL 客户端中定义的变量值
  • Inherit query from ancestor(s)?: 使用与父持久化 Query 相同的 query。
    此选项在模块 API Hierarchy 启用且持久化 Query 拥有父 query(在文档设置中选择)时可用

以下是文档设置中的输入项:

输入项说明
固定链接持久化 Query 发布后的端点路径
分类可对持久化 Query 进行分类。
例如:mobileapp
Excerpt为持久化 Query 提供描述。
此输入项在模块 Excerpt as Description 启用时可用
页面属性选择父持久化 Query。
此输入项在模块 API Hierarchy 启用时可用