使用documentation中的简单“ Movies API”示例。我在ttl
函数中添加了getMovie
,以便将结果缓存10分钟。如何使updateMovie
函数中的缓存无效?
const { RESTDataSource } = require('apollo-datasource-rest');
class MoviesAPI extends RESTDataSource {
async getMovie(id) {
return this.get(`movies/${id}`, {}, { cacheOptions: { ttl: 600 } });
}
async updateMovie(id, data) {
const movie = await this.put(`movies/${id}`, data);
// invalidate cache here?!
return movie;
}
}
我知道传递给ApolloServer的KeyValueCache
接口提供了delete
功能。但是,该对象似乎未在数据源中公开。它包装在HTTPCache
内部,仅公开fetch
函数。 KeyValueCache
也包装在PrefixingKeyValueCache
内,因此,假设内部实现为RESTDataSource
,在没有一些讨厌的骇客的情况下,几乎不可能在缓存中包含某些内容。
使用文档中的简单“ Movies API”示例。我在getMovie函数中添加了一个ttl,以便将结果缓存10分钟。如何使updateMovie中的缓存无效...
似乎是我能找到的最好的解决方案,就是只保留HTTP缓存层,并使用单独的缓存层: