【问题标题】:Limit Api Calls, api is in a php template限制 Api Calls,api 在 php 模板中
【发布时间】:2019-10-16 17:36:52
【问题描述】:

我正在尝试限制 api 调用的频率。

api调用在页面模板中

<?php   

$producturl = 'theapiurl';
$product_json = file_get_contents($producturl); 
$product_array = json_decode($product_json, true);  
$price = min(array_column($product_array['products'][0]['offerData']['offers'],'price'));
?>

some html
<?php echo $price ?>

我想要的是 API 仅每 12 小时调用一次(例如,数据不会经常更改) 并且如果在这 12 小时内第二次加载模板,则不会再次调用 api,但 $price 输出应该仍然有效。

这可能吗?

【问题讨论】:

  • 修改后还是太宽泛了。问题是,你将如何调用代码?从命令行,它是网站的一部分,等等?
  • 老实说,我在原始帖子中包含了所有这些信息。它在一个网站上,在一个 php 页面模板中。所以每次访问者访问第 x 页时,都会运行此脚本/模板,我需要来自 api 调用的数据来生成页面,但数据不会经常更改。所以每 12 小时抓取一次数据并使用该数据 12 小时就可以了。只是不确定我想要什么是可能的
  • 确定这是可能的,但一般来说,您不会直接从网页调用它们,而是从 Cron 作业或 Windows 调度程序调用它们。如果您需要将其保留在网页中,任何人都可以随意调用它,您只需要放置一些时间跟踪器,使页面在每天调用超过一次时不会调用 API。您确实需要能够将时间写入外部文件或数据库,以进行检查。
  • 基本上您需要的是这里列出的解决方案之一stackoverflow.com/q/16190783/50003 如果您无权访问或不想使用一个,您也可以使用文件而不是数据库。跨度>

标签: php api cdn rate-limiting


【解决方案1】:

答案取决于您对服务器的访问权限以及获取新数据的容易/快速程度。

您可以按照 Gnudiff 的建议进行操作,并使用 cron 命令按计划获取数据,然后将其存储在数据库中,以便您在每个响应中返回。

或者您可以使用像 Redis 这样的内存存储来缓存数据。当用户调用端点时,您检查缓存以查看它是否存在。由于它不存在,因此请获取您的数据,将其存储在缓存中,并在 12 小时结束时过期的数据上使用 TTL,然后将其返回给用户。以下请求都遵循相同的流程,如果存在则从缓存中返回,如果不存在则获取最新数据,然后将其返回给用户。

【讨论】:

  • 我拥有对服务器的完全访问权限,但以前从未使用过诸如使用 redis 进行内存存储之类的东西(我对这方面的很多东西真的很陌生)我可能会使用 cron 方法。将其存储在我的数据库中,从那里提供内容并每 12 小时到 24 小时覆盖数据库中的数据。这听起来像是我应该能够做的事情
猜你喜欢
  • 1970-01-01
  • 2022-12-19
  • 2013-11-09
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2020-06-09
相关资源
最近更新 更多