## 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');
}
});
~~~