缓存搜索/存储库的GitHub API响应



我想在Rails中编写Web应用程序以搜索GitHub存储库。由于查询GitHub API有限制,因此我认为缓存响应是一个好主意。此端点search/repositories?q=search_term以分页格式返回结果。所以,我不确定在这种情况下如何缓存?

有很多方法可以在缓存中串联分页,但是所有这些都需要向分页中的每个页面提出新的请求。

所以,让用户直觉统治。如果用户需要下一页,请给他们选项单击"下一页",并遵循GitHub提供的链接标头。在您的缓存中看起来如何?由于它们在URL末尾提供了方便的page=2参数,因此您为什么不使用用户请求的URL作为密钥,而值是响应。

url = "api.github.com/search/resource?q=name:cool+name"
if(get(url)) return get(url)
response = get(url)
set(url, response)
return response

如果用户单击"下一页",则应提出此请求:

url = "api.github.com/search/resource?q=name:cool+name&page=2"
if(get(url)) return get(url)
response = get(url)
set(url, response)
return response

但是,看看该过程不会改变?如果在缓存中,请发送。如果不是,请不要。

为什么我们不想递归缓存所有页面?因为人类最了解。每次搜索都会愉快地缓存1,000,000个响应。但是,如果99.99%的人只是在寻找第一页的响应呢?为什么浪费所有的空间?因此,通过分页,让人们选择是否需要更多数据总是最容易的。不要尝试预先使用可能永远不会使用的调查数据。

最新更新