Cakephp+HttpSocket组件+restfulapi

Cakephp+HttpSocket组件+restfulapi,php,cakephp,Php,Cakephp,最近我用CakePHP编写了一个小网页。我的大多数模型都表示必须通过外部API和提供CakePHP 2.x的HttpSocket组件收集的数据 这就是我在AppModel.php中包含以下方法的主要原因 我想实现一些措施来控制CakePHP调用API的次数,因为它有限制,例如每分钟100个请求,每小时1000个请求 实现这一目标的最佳方式是什么? 我考虑将与请求相关的数据存储在一个新表中,但我不确定是否可以从AppModel.php执行查询 谢谢我将创建一个新表,如api\u call\u lo

最近我用CakePHP编写了一个小网页。我的大多数模型都表示必须通过外部API和提供CakePHP 2.x的HttpSocket组件收集的数据

这就是我在AppModel.php中包含以下方法的主要原因

我想实现一些措施来控制CakePHP调用API的次数,因为它有限制,例如每分钟100个请求,每小时1000个请求

实现这一目标的最佳方式是什么? 我考虑将与请求相关的数据存储在一个新表中,但我不确定是否可以从AppModel.php执行查询


谢谢

我将创建一个新表,如api\u call\u log,并增加计数。您只需在AppModel中获取一个模型实例:

$ApiCallLog = ClassRegistry::init('ApiCallLog')
$ApiCallLog->log();
将计数的逻辑放入model方法,并根据需要传递参数,但不确定还需要什么

行为可能是一个更好的地方,而不是将其放在AppModel中,您可以在那里实现其他方法,随着代码的增长,只将其附加到需要它的模型上

与使用SQL DB相比,资源消耗更少的另一种选择是使用Redis缓存。因此,使用Cache::read和Cache::write来获取实际计数并增加它。如果您收到大量对API的请求,这很可能是更好的选择。如果在计数和递增操作期间不锁定表,则使用SQL DB可能会发生冲突。我从未遇到过这种情况,但我不会指望它不会发生


附加说明:get是一个非常通用的名称,我会将其重命名为httpGet。不特定的名称可能会非常混乱,尤其是在其他类中存在同名方法的情况下。

我将在接下来的几天中尝试DB和Cache两种选项。get方法名不依赖于我,它是CakePHP组件的一部分。谢谢你的回答,伙计。
$ApiCallLog = ClassRegistry::init('ApiCallLog')
$ApiCallLog->log();