【问题标题】:How to cache an api response?如何缓存 api 响应?
【发布时间】:2021-01-07 01:55:09
【问题描述】:

我正在使用 api http://exchangeratesapi.io/ 来获取汇率。

他们的网站要求:

请尽可能缓存结果,这将使我们能够在没有任何速率限制或 API 密钥要求的情况下保持服务。

-source

然后我发现了这个:

默认情况下,对 exchangeatesapi.io API 的所有请求的响应都会被缓存。这样可以显着提高性能并减少服务器的带宽。

-somebody's project on github,不确定是否准确

我以前从未缓存过任何东西,这两个语句让我感到困惑。当 API 的站点说“请缓存结果”时,听起来缓存是我可以在 fetch 请求中或以某种方式在前端执行的操作。例如,某种方式将结果存储在本地存储中什么的。但是我找不到有关如何执行此操作的任何信息。我只找到了有关如何强制响应不缓存的资源。

第二个引用听起来好像缓存是 API 自己在其服务器上执行的操作,因为它们自动将响应设置为缓存。

如何像 api 网站要求的那样缓存结果?

【问题讨论】:

    标签: http caching browser-cache cache-control


    【解决方案1】:

    为了消除您对所引用的相互矛盾的陈述的困惑:

    缓存只是意味着存储数据。可以将数据存储在内存中、某些持久层(如 Redis)或浏览器的本地存储(如您提到的)中的示例。缓存的目的可能是更快地为未来的请求/获取提供数据(与从主数据源获取数据相比),和/或节省重复获取相同数据的成本等。

    对于您的情况,http://exchangeratesapi.io/ API 建议消费者将结果缓存在他们身边(正如您在问题中提到的,如果您调用 API 前端,这可以在浏览器的本地存储中代码,或存储在内存或服务器端应用程序代码调用 API 上的其他缓存机制/结构中),从而可以避免引入速率限制的需要。

    您引用的来自 Github 的项目 Laravel Exchange Rates 似乎是原始 API 的 PHP 包装器 - 所以它就像 API 和开发人员的 PHP 代码之间的中间人。目的是让在 PHP 代码中更容易使用 API,避免向 API 发出原始 HTTP 请求并避免处理响应; Laravel Exchange Rates 为开发人员处理。

    关于

    默认情况下,所有对 exchangeatesapi.io API 的请求的响应都会被缓存

    您要询问的声明,似乎库遵循 API 的建议,caches 来自源 API 的结果。

    所以,总结一下:

    1. http://exchangeratesapi.io/ 是源 API,它建议消费者缓存结果。如果您的代码要调用此 API,您可以将结果缓存在自己的代码中。
    2. Laravel Exchange Rates PHP 库是该源 API 的包装器,确实为用户缓存源 API 的结果。如果您使用此库,则无需进一步缓存。

    【讨论】:

    • 感谢您的澄清!
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 2017-09-03
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2015-08-21
    • 2022-06-13
    • 2023-03-06
    相关资源
    最近更新 更多