创建 API
创建 API添加 HTTP 缓存

添加 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 配置中定义的默认值:

Schema 配置中的默认 max-age 值

若未设置,则使用设置页面「Cache Control」选项卡中定义的默认 max-age 值。该值默认为 86400 秒,可在设置中修改

示例

假设我们对 User 类型的字段配置了以下 max-age 值:

  • name => 600
  • url => 30

那么,此 query 的响应 max-age 值将被设为 86400(因为 displayNameemail 均未配置,使用默认值):

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,从而让自定义端点或持久化查询使用它。

在 Schema 配置中选择缓存控制列表

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

在设置页面中选择默认缓存控制列表