在 Apollo 的 GraphQL 版本中,有一些获取策略指定获取查询是应该从服务器获取数据还是使用本地缓存(如果有数据可用)。
此外,缓存规范化允许使用缓存来减少需要从服务器获取的数据量。例如,如果我请求对象 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 )上完成的缓存计时有一些进展,但没有什么特别的?