添加 HTTP 缓存
当使用(更传统的 POST 方法以外的)GET 方式对 GraphQL 服务器执行查询时,可以利用标准 HTTP 缓存,将 GraphQL 响应缓存在客户端或客户端与服务器之间的中间环节(例如 CDN)。
这对持久化查询天然有效,对于单一端点和自定义端点,可以通过在端点后附加参数 ?query={ GraphQL query } 来实现。
配置通过缓存控制列表创建,并经由 Schema 配置传递到端点。
通过 GET 执行端点
持久化查询已天然适合通过 GET 执行,因为它们将 GraphQL query 存储在服务器端(即无需在请求体中提供)。
而对于单一端点和自定义端点,则需要通过附加在端点 URL 上的参数 ?query=... 来提供 query。
例如,以下 GraphQL query:
{
posts {
id
title
url
author {
id
name
url
}
}
}...可以像这样通过 GET 对单一端点执行:
https://mysite.com/graphql/?query={ posts { id title url author { id name url } } }
max-age 自动计算
响应的 max-age 值由分配给端点的访问控制列表(通过 Schema 配置)自动计算得出。
该值取请求 query 中所有字段和指令中最低的 max-age 值,以下情况则返回 no-store:
- 执行了任何 mutation
- 任何字段或指令的
max-age值为0 - 访问控制规则需要检查任何字段或指令的用户状态(此时响应是用户专属的,无法被缓存)
默认 max-age
未设置特定 max-age 的字段将使用 Schema 配置中定义的默认值:

若未设置,则使用设置页面「Cache Control」选项卡中定义的默认 max-age 值。该值默认为 86400 秒,可在设置中修改。
示例
假设我们对 User 类型的字段配置了以下 max-age 值:
name=>600url=>30
那么,此 query 的响应 max-age 值将被设为 86400(因为 displayName 和 email 均未配置,使用默认值):
query {
users {
displayName
email
}
}此 query 的响应 max-age 值将被设为 30(对应所有已配置字段中最低值 url):
query {
user(by: {id: 1}) {
name
url
}
}此 query 的响应 max-age 值将被设为 no-store(因为字段 me 需要用户状态):
query {
me {
name
url
}
}此 query 的响应 max-age 值将被设为 no-store(因为执行了 mutation):
mutation {
createPost {
id
}
}访问所有缓存控制列表
点击插件菜单中的「Cache Control Lists」,即可显示所有已创建的缓存控制列表:

创建新的缓存控制列表
点击「Add New Cache Control List」按钮,打开 WordPress 编辑器:

为缓存控制列表添加标题,添加包含字段和指令的条目,并为其配置 max-age 值:

准备就绪后,点击 Publish 按钮。新的缓存控制列表即可在 Schema 配置中使用。
缓存控制条目
每个缓存控制列表包含一个或多个条目,每个条目包含以下元素:
- 要配置缓存的字段
- 要配置缓存的指令
- 对应的
max-age值

从接口中选择字段
除了从类型中选择字段外,还可以从接口中选择字段。此时,max-age 值将应用于从任何实现该接口的类型查询这些字段时。

描述缓存控制列表
使用文档设置面板中的「Excerpt」字段,为缓存控制列表添加描述。
更多信息请参阅指南为 API 添加描述。
使用缓存控制列表
创建缓存控制列表后,可通过编辑对应的 Schema 配置,在「Cache Control Lists」块下的列表中选择 ACL,从而让自定义端点或持久化查询使用它。

若不自定义配置,则使用设置页面「Cache Control」选项卡中定义的默认缓存控制列表:
