Caching 如何使Apollo Server RESTDataSource中的缓存无效

Caching 如何使Apollo Server RESTDataSource中的缓存无效,caching,apollo-server,apollo-datasource-rest,Caching,Apollo Server,Apollo Datasource Rest,使用中的简单电影API示例。我在getMovie函数中添加了一个ttl,以便将结果缓存10分钟。如何使updateMovie函数中的缓存无效 const{RESTDataSource}=require'apollo-datasource-rest'; 类MoviesAPI扩展了RESTDataSource{ 异步getMovieid{ 返回这个.get`movies/${id}`,{},{cacheOptions:{ttl:600}; } 异步updateMovieid,数据{ const mo

使用中的简单电影API示例。我在getMovie函数中添加了一个ttl,以便将结果缓存10分钟。如何使updateMovie函数中的缓存无效

const{RESTDataSource}=require'apollo-datasource-rest'; 类MoviesAPI扩展了RESTDataSource{ 异步getMovieid{ 返回这个.get`movies/${id}`,{},{cacheOptions:{ttl:600}; } 异步updateMovieid,数据{ const movie=wait this.put`movies/${id}`,data; //这里的缓存无效?! 回归电影; } }
我知道传递给ApolloServer的KeyValueCache接口提供了删除功能。但是,这个对象似乎没有在数据源中公开。它被包装在HTTPCache中,HTTPCache只公开一个fetch函数。KeyValueCache也被包装在一个前缀KeyValueCache中,因此,假设RESTDataSource的内部实现,在没有恶意攻击的情况下,几乎不可能在缓存中添加任何内容。

我能找到的最佳解决方案似乎是,只需离开HTTP缓存层,使用一个单独的缓存层:

const{RESTDataSource}=require'apollo-datasource-rest'; 从“apollo服务器缓存”导入{PrefixingKeyValueCache}; 类MoviesAPI扩展了RESTDataSource{ 初始化图{ super.initializeconfig; this.movieCache=new PrefixingKeyValueCacheconfig.cache,“movies:”; } 异步getMovieid{ const cached=等待this.movieCache.getid; 如果缓存,则返回缓存; const movie=等待此消息。获取'movies/${id}'; 等待this.movieCache.setid,movie; 回归电影; } 异步updateMovieid,数据{ const movie=wait this.put`movies/${id}`,data; 等待this.movieCache.deleteid; 回归电影; } }
它仍在使用应用程序缓存,但前缀与HTTP缓存不同。

我能找到的最佳解决方案似乎是,不使用HTTP缓存层,而是使用单独的缓存层:

const{RESTDataSource}=require'apollo-datasource-rest'; 从“apollo服务器缓存”导入{PrefixingKeyValueCache}; 类MoviesAPI扩展了RESTDataSource{ 初始化图{ super.initializeconfig; this.movieCache=new PrefixingKeyValueCacheconfig.cache,“movies:”; } 异步getMovieid{ const cached=等待this.movieCache.getid; 如果缓存,则返回缓存; const movie=等待此消息。获取'movies/${id}'; 等待this.movieCache.setid,movie; 回归电影; } 异步updateMovieid,数据{ const movie=wait this.put`movies/${id}`,data; 等待this.movieCache.deleteid; 回归电影; } } 它仍在使用应用程序缓存,但前缀与HTTP缓存不同