栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何限制网站的API用户?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何限制网站的API用户?

好的,没有对服务器的 任何
写操作就无法完成我所要求的操作,但是至少可以避免记录每个请求。一种方法是使用“泄漏桶”节流方法,该方法仅跟踪最后一个请求(

$last_api_request
)和时间范围内请求数/限制的比率(
$minute_throttle
)。泄漏的存储区永远不会重置其计数器(与每个小时都会重置的Twitter
API的油门不同),但是如果存储区已满(用户已达到限制),则他们必须等待
n
几秒钟以使存储区清空,然后才能发出另一个请求。换句话说,这就像一个滚动限制:如果在时间范围内有先前的请求,它们正在缓慢地从存储桶中泄漏出去;仅在您加满水桶时才限制您。

此代码段将为

$minute_throttle
每个请求计算一个新值。我指定了 分钟
$minute_throttle
因为您可以在任何时间段(例如,每小时,每天等)添加节流阀,尽管不止一个会很快使用户感到困惑。

$minute = 60;$minute_limit = 100; # users are limited to 100 requests/minute$last_api_request = $this->get_last_api_request(); # get from the DB; in epoch seconds$last_api_diff = time() - $last_api_request; # in seconds$minute_throttle = $this->get_throttle_minute(); # get from the DBif ( is_null( $minute_limit ) ) {    $new_minute_throttle = 0;} else {    $new_minute_throttle = $minute_throttle - $last_api_diff;    $new_minute_throttle = $new_minute_throttle < 0 ? 0 : $new_minute_throttle;    $new_minute_throttle += $minute / $minute_limit;    $minute_hits_remaining = floor( ( $minute - $new_minute_throttle ) * $minute_limit / $minute  );    # can output this value with the request if desired:    $minute_hits_remaining = $minute_hits_remaining >= 0 ? $minute_hits_remaining : 0;}if ( $new_minute_throttle > $minute ) {    $wait = ceil( $new_minute_throttle - $minute );    usleep( 250000 );    throw new My_Exception ( 'The one-minute API limit of ' . $minute_limit         . ' requests has been exceeded. Please wait ' . $wait . ' seconds before attempting again.' );}# Save the values back to the database.$this->save_last_api_request( time() );$this->save_throttle_minute( $new_minute_throttle );


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号