【发布时间】:2021-03-07 20:51:26
【问题描述】:
在 Apollo 的 GraphQL 版本中,有fetch policies 指定获取查询是应该从服务器获取数据还是使用本地缓存(如果有数据可用)。
此外,缓存规范化允许使用缓存来减少需要从服务器获取的数据量。例如,如果我请求对象 A 和对象 B,但之前我请求了 A 和 C,那么在我当前的查询中,它将从缓存中获取 A,并从服务器获取 B。
但是,它们为整个查询指定缓存策略。我想知道是否有一种方法可以在各个字段上指定 TTL。
从开发人员的角度来看,我希望能够在我的查询中指定我想缓存我请求的某些信息,而不是其他信息。例如,采用以下查询:
query PersonInfo($id: String) {
person(id: $id) {
birthcertificate // Once this is cached, it is cached forever. I should just always get this info from the cache if it is available.
age // I want to have this have a TTL of a day before invalidating the cached value and going to network
legalName // I want to always go to network for this information.
}
}
换句话说,对于固定的id 值(并假设这是唯一涉及人员对象或其字段的查询):
- 第一次进行此查询时,我从服务器获取了所有三个字段。
- 现在,如果我在几秒钟内再次进行此查询,我应该只从服务器获取第三个字段 (
legalName),从缓存中获取前两个。 - 现在,如果我等待超过一天,然后再次进行此查询,我会从缓存中获得
birthCertificate,并从服务器获得age+legalName。
目前,要按照我想要的方式执行此操作,我最终编写了三个不同的查询,每个查询一个 TTL。有没有更好的办法?
更新:在 iOS 客户端 (https://github.com/apollographql/apollo-ios/issues/142) 上完成的缓存计时有一些进展,但没有具体说明?
【问题讨论】:
标签: caching graphql apollo graphql-java apollo-ios