## 6 速率限制
请求速率限制,根据api_key或者用户来判断某段时间的请求次数,将该数据更新到内存数据库(redis,memcached),达到最大数即不接受该用户的请求,同时这样还可以利用到内存数据库key在特定时间自动过期的特性。在[php](http://blog.nsfocus.net/tag/php/ "php")中可以使用APC,Alternative[PHP](http://blog.nsfocus.net/tag/php/ "php") Cache (APC) 是一个开放自由的[PHP](http://blog.nsfocus.net/tag/php/ "php") opcode 缓存。它的目标是提供一个自由、 开放,和健全的框架用于缓存和优化[PHP](http://blog.nsfocus.net/tag/php/ "php")的中间代码。在返回时设置X-Rate-Limit-Reset:当前时间段剩余秒数,APC的示例代码如下:
代码。在返回时设置X-Rate-Limit-Reset:当前时间段剩余秒数,APC的示例代码如下:
~~~
Route::filter('api.limit', function()
{
$key = sprintf('api:%s', Auth::user()->api_key);
// Create the key if it doesn't exist
Cache::add($key, 0, 60);
// Increment by 1
$count = Cache::increment($key);
// Fail if hourly requests exceeded
if ($count > Config::get('api.requests_per_hour'))
{
App::abort(403, 'Hourly request limit exceeded');
}
});
~~~