gpt4 book ai didi

php - API 请求限制的解决方法

转载 作者:可可西里 更新时间:2023-10-31 23:05:16 25 4
gpt4 key购买 nike

我在开发 Wordpress 插件时遇到了问题。基本上,我正在构建插件的 API 将我需要发出的请求限制为每分钟 6 个,但是当插件激活时,我需要发出超过 6 个请求来下载插件所需的 API 数据 -中。

API 是 LimelightCRM API ( http://help.limelightcrm.com/entries/317874-Membership-API-Documentation )。我正在使用 API 的 campaign_view 方法,我想做的可能是批量发出请求,但我不太确定如何解决这个问题。

想法 1:就在我的脑海中,我想我需要计算在插件激活时我需要使用 PHP 发出的请求数,方法是使用 campaign_find_active 然后将其除以按请求限制 (6) 计数,每分钟发出 6 个 campaign_view 请求,直到我拥有所需的所有数据并将它们存储在 Wordpress 瞬变中。但是,假设我需要发出 30 个请求,用户不能坐等 5 分钟来下载数据。即使我设法为此找到了解决方案,它也可能需要我设置 Wordpress 瞬变的时间限制,使插件永远不需要发出超过 6 个请求。所以我的下一个想法是,我可以使用 Wordpress 钩子(Hook)每隔一段时间发出请求,同时检查最后一批请求的发出时间吗?所以它已经变得非常棘手。我想知道你们是否可以指出我正确的方向。您对我如何能够突破此速率限制有任何想法吗?

想法 2:将值存储在数据库中的 Cron 作业?

//Fetch Campaign ID's
$t_campaign_find_active = get_transient('campaign_find_active');
if(!$t_campaign_find_active){
limelight_cart_campaign_find_active();
$t_campaign_find_active = get_transient('campaign_find_active');
return $t_campaign_find_active;
}

//Fetch Campaign Information for each Campaign ID
$llc_cnames = array();
foreach($llc_cids as $count => $id) {
if(!get_transient('campaign_view_'.$id)) {
limelight_cart_campaign_view($id);
$llc_cnames[$id] = get_transient('campaign_view_'.$id);
}
}

//Merge Campaign ID's and Campaign Info into Key => Value array
$limelight_campaigns = array_combine($llc_cids, $llc_cnames);

注意:函数 limelight_cart_campaign_find_active()limelight_cart_campaign_view() 未包括在内,因为它们只是发出单个 API 请求、返回响应并存储它在 Wordpress transient 中。如果你们需要,我可以包含代码,但出于本示例的目的,插件的那部分正在运行,所以我没有包含它。

最佳答案

我已经为这些家伙想出了一个解决方案,我早该想到的。所以我得出的结论是,在当前的速率限制下,在激活时下载所有 API 数据是根本不可能的。大多数可能使用该插件的人都会有太多的事件来一次下载他们的所有数据,如果我保持代码不变,那么大多数时候速率限制将不可避免地用完。因此,与其在激活后立即为插件准备好 API 数据,不如让用户能够根据需要使用 AJAX 进行 API 调用。那么让我来解释一下它是如何工作的。

首先,在插件激活时,最初不会下载任何数据,用户需要输入他们的 API 凭据,插件将验证它们并在凭据有效和 API 时给他们一个复选标记登录成功。它使用一个 API 请求。

现在,用户无需在“添加产品”管理页面上预先填充事件列表,只需单击“添加产品”页面上的按钮即可发出 AJAX campaign_find_active 请求这将获取事件 ID 并返回事件 ID 和名称的下拉菜单。仅使用一个请求。

获取下拉数据后,他们需要选择要使用的事件,选择事件 ID 后,插件将显示另一个按钮以发出 campaign_view 请求获取与 ID 关联的事件数据。这将返回另一个下拉菜单,允许他们选择产品。这还需要一些 CSS 和 jQuery 来根据下拉值显示/隐藏 AJAX 按钮。这将仅使用一个 API 请求,并且由于该请求不是自动发出的并且需要单击按钮,因此用户在获取的第一个下拉菜单中选择事件 ID 时不会发出多个 API 请求。

然后用户将单击发布,并获得一个 wordpress 索引产品,其中附加并缓存了所有必要的风头数据。所有 API 请求都将以 1 小时的时间限制存储在 transient 中,这个小时的原因是他们不必等待 24 小时以防他们进行更新。我还将在设置页面上添加一个按钮来清除瞬变,以便他们可以在需要时按需重新下载。这也可能有点棘手,但就这个问题而言,这不是问题。

我总共只使用了 3-4 个 API 请求。我可能还会在其中构建一个计数器,这样我就可以在用户一次使用太多请求时向他们显示一条错误消息。类似于“已达到 API 每分钟 10 次请求的限制,请等待 60 秒,然后重试。”

我欢迎任何评论、建议或批评。希望这对受 API 请求限制困扰的人有所帮助,如果您不介意为用户提供更多控制权,AJAX 是解决该问题的好方法。

关于php - API 请求限制的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com