【发布时间】:2014-07-09 14:29:22
【问题描述】:
我在开发 Wordpress 插件时遇到了问题。基本上,我正在构建插件的 API 将我需要发出的请求限制为每分钟 6 个,但是当插件激活时,我需要发出超过 6 个请求来下载插件所需的 API 数据 -在。
API 是 LimelightCRM API (http://help.limelightcrm.com/entries/317874-Membership-API-Documentation)。我正在使用 API 的 campaign_view 方法,我想做的可能是批量发出请求,但我不太确定如何解决这个问题。
想法 1:
就在我的脑海中,我想我需要使用campaign_find_active 计算我需要在插件激活时使用 PHP 发出的请求数,然后将该计数除以请求限制(6),然后每分钟发出 6 个campaign_view 请求,直到我拥有所需的所有数据并将它们存储在 Wordpress 瞬态中。但是,假设我需要发出 30 个请求,用户不能只是坐等 5 分钟来下载数据。即使我设法为此提出解决方案,也可能需要我设置 Wordpress 瞬态的时间限制,以使插件永远不需要发出超过 6 个请求。所以我的下一个想法是,我可以使用 Wordpress 钩子在检查最后一批请求的时间时经常发出请求吗?所以它已经变得非常棘手。我想知道你们是否能指出我正确的方向。您对我如何能够突破这个速率限制有任何想法吗?
想法 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 瞬态中。如果你们需要,我可以包含代码,但出于本示例的目的,插件的那部分是有效的,所以我没有包含它。
【问题讨论】:
-
想法 3 - 联系Lime Light CRM support 并了解可以做什么。有时我们已经习惯了黑客攻击,我们忘记了在另一端可能有一个经过批准的现成解决方案的人。