使用apollo引擎的cacheControling响应的规则是什么(使用缓存提示)?

时间:2018-01-26 05:02:12

标签: graphql apollo apollo-server

我正在研究response caching并且很想知道response caching的正确方法。

尽管cache hints只有两种类型,但我并不清楚如何正确使用它们。

我的经验法则是,只要我们获取只有登录用户可以访问的数据,就应该实现PRIVATE scope

maxAge时,我感到完全迷失了。似乎数据是否将被兑现40秒或60 ...

鉴于Apollo文档中的一个示例,我没有看到在votes中缓存type Post 500秒并将type Post的缓存设置为240的原因(根据文档:a较小的maxAge会覆盖较长的一个

type Post @cacheControl(maxAge: 240) {
  id: Int!
  title: String
  author: Author
  votes: Int @cacheControl(maxAge: 500)
  readByCurrentUser: Boolean! @cacheControl(scope: PRIVATE)
}

type Author @cacheControl(maxAge: 60) {
  id: Int
  firstName: String
  lastName: String
  posts: [Post]
}

请你帮助我理解这些概念,因为没有它们就很难向前推进。

1 个答案:

答案 0 :(得分:2)

您可以在架构上定义缓存控制提示,然后Apollo Engine将根据查询中包含的字段计算响应的TTL。给出以下架构:

type Post @cacheControl(maxAge: 240) {
  id: Int!
  title: String
  author: Author
  votes: Int @cacheControl(maxAge: 30)
  readByCurrentUser: Boolean! @cacheControl(scope: PRIVATE)
}

对帖子的查询将被缓存240秒,除非它包含votes,这将使响应仅可缓存30秒。

同样,包括readByCurrentUser会将整个回复标记为private,因此不会将其存储在公共缓存中。