http - 如何缓存 api 响应?
问题描述
我正在使用 apihttp://exchangeratesapi.io/
来获取汇率。
他们的网站问:
请尽可能缓存结果,这将使我们能够在没有任何速率限制或 API 密钥要求的情况下保持服务。
-来源
然后我发现了这个:
默认情况下,对 exchangeatesapi.io API 的所有请求的响应都会被缓存。这可以显着提高性能并减少服务器的带宽。
-某人在 github 上的项目,不确定是否准确
我以前从未缓存过任何东西,这两个语句让我感到困惑。当 API 的站点说“请缓存结果”时,听起来缓存是我可以在fetch
请求中或以某种方式在前端执行的操作。例如,某种方式将结果存储在本地存储中什么的。但是我找不到有关如何执行此操作的任何信息。我只找到了有关如何强制响应不缓存的资源。
第二个引用听起来好像缓存是 API 在他们的服务器上自己做的事情,因为他们自动将响应设置为缓存。
如何缓存 api 站点要求的结果?
解决方案
为了消除您对所引用的相互矛盾的陈述的困惑:
缓存只是意味着存储数据。可以将数据存储在内存中、某些持久层(如 Redis)或浏览器的本地存储(如您提到的)中的示例。缓存背后的目的可以是为将来的请求/获取更快地提供数据(与从主数据源获取数据相比),和/或节省重复获取相同数据的成本等。
对于您的情况,http://exchangeratesapi.io/
API 建议消费者将结果缓存在他们身边(正如您在问题中提到的,如果您正在调用 API 前端代码,这可以在浏览器的本地存储中,或者存储在内存中或调用 API 的服务器端应用程序代码上的其他缓存机制/结构)可以避免引入速率限制的需要。
您引用的来自 Github 的项目Laravel Exchange Rates似乎是原始 API 的 PHP 包装器 - 所以它就像 API 和开发人员的 PHP 代码之间的中间人。目的是让在 PHP 代码中更容易使用 API,避免向 API 发出原始 HTTP 请求并避免处理响应;Laravel 汇率为开发人员处理。
关于
默认情况下,所有对 exchangeatesapi.io API 的请求的响应都会被缓存
您要询问的声明,似乎该库遵循 API 的建议,并缓存了源 API 的结果。
所以,总结一下:
http://exchangeratesapi.io/
是源 API,它建议消费者缓存结果。如果您的代码将调用此 API,您可以将结果缓存在您自己的代码中。- Laravel Exchange Rates PHP 库是该源 API 的包装器,并为用户缓存源 API 的结果。如果您使用此库,则无需进一步缓存。
推荐阅读
- python-3.x - 使用 Selenium 抓取(Python)时只有第一行
- grafana - Grafana 和 influxdb 中的地理围栏
- awk - 从 awk 中的多个输入输出匹配列
- java - 如何绕过 Maven 中的编译?
- c# - 用户控制 - (已存在具有相同键的条目)
- android - Android 在添加对 64 位的支持时:找不到 DSO 问题
- scala - spark数据框:查找薪水高于组织平均薪水的员工
- javascript - Vue 动画是即时的(无持续时间)
- javascript - 将 Javascript 变量传递给 Java 控制器(Spring-boot)
- python - python:如何确定两个插值点之间的距离?