2010-10-20 54 views
1

阅读http://blog.programmableweb.com/2007/04/02/12-ways-to-limit-an-api/我想知道如何完成基于时间的限制(即每秒1个呼叫)。那么,如果需要认证,方法是比较PHP的时间函数跟踪秒(例如,if ($previous_call_time == $current_call_time) { ... })?还有其他建议吗?如何限制API调用?

+1

有什么建议?如果你需要时间限制,除了实际比较时间之外,我没有看到任何其他方法。 – casablanca 2010-10-20 04:38:21

回答

4

使用简单的缓存:

if(filemtime("cache.txt") < (int)$_SERVER["REQUEST_TIME"] - 3600) { // 3600 is one hour in seconds 
    $data = file_get_contents("http://remote.api/url/goes/here"); 
    file_put_contents("cache.txt", $data); 
} else 
    $data = file_get_contents("cache.txt"); 

像这样将节省API的价值,并让,只要你想,同时还限制多久,你实际上是从进料拉日你得到的信息。

希望这会有所帮助!

+0

这实际上有很大的帮助。谢谢! – madhushankarox 2018-02-05 12:25:55

1

更一般的限制条件是“每个'期间的通话次数'”。例如 - 每小时,就像twitter一样。

通过向每个请求的mysql添加记录,您可以跟踪当前执行的请求的数量。

这种方式更高性能的解决方案是使用memcached并递增“key”(user_id + current_hour)。

-1

需要考虑的事情:您可以使用外部服务来执行此操作,而不是自己构建它。例如。我的公司WebServius(http://www.webservius.com)目前支持可配置的每个API和每个API关键节制,而且我们很可能会添加更多的功能,例如“自适应节流”(当API响应变慢时自动节制使用)。