osid / laravel-api-rate-limiter
一个强大的Laravel API速率限制和节流包。
v1.0.1
2024-06-06 14:05 UTC
Requires
- php: ^7.4 || ^8.1
- illuminate/support: ^8.0 || ^9.0 || ^10.0
README
一个强大的Laravel API速率限制和节流包,旨在管理和控制对API的请求流量,防止滥用并确保公平使用。
安装
-
需要此包
运行以下命令通过Composer安装此包
composer require osid/laravel-api-rate-limiter
-
发布配置
使用Artisan命令发布配置文件
php artisan vendor:publish --provider="osid\ApiRateLimiter\ApiRateLimiterServiceProvider" --tag=config
这将在
config/api-rate-limiter.php
处创建一个配置文件。
配置
api-rate-limiter.php
配置文件允许您为API路由定义速率限制和突发设置。以下是一个配置示例
return [ 'global' => [ 'limit' => 1000, // Requests per hour 'burst' => 50, // Burst limit ], 'routes' => [ 'api/v1/users' => [ 'limit' => 500, 'burst' => 20, ], 'api/v1/orders' => [ 'limit' => 200, 'burst' => 10, ], ], 'user_based' => true, // Enable user-specific limits 'ip_based' => true, // Enable IP-based limits 'cache_driver' => 'redis', // Cache driver to use 'response_messages' => [ 'rate_limit_exceeded' => 'Too many requests. Please try again later.', ], ];
-
全局设置
limit
:每小时全球允许的最大请求数。burst
:在短时间内的额外请求。
-
路由特定设置
- 为特定路由定义限制和突发设置。
-
基于用户和基于IP的限制
user_based
:启用基于认证用户的速率限制。ip_based
:启用基于客户端IP地址的速率限制。
-
缓存驱动器
cache_driver
:指定要使用的缓存驱动器(例如,redis
,memcached
)。
-
响应消息
- 自定义超过速率限制时的响应消息。
应用中间件
要将速率限制中间件应用于API路由,请将其添加到您的routes/api.php
文件中的路由。
use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; use App\Http\Controllers\OrderController; Route::middleware(['api.rate.limiter'])->group(function () { Route::get('/users', [UserController::class, 'index']); Route::get('/orders', [OrderController::class, 'index']); // Other routes });
示例用法
-
全局速率限制
要应用全局速率限制,请确保在
config/api-rate-limiter.php
中设置了global
配置。这将应用于未特别配置的所有路由。 -
路由特定速率限制
要将速率限制应用于特定路由,请在
config/api-rate-limiter.php
中的routes
键下定义它们。
'api/v1/users' => [ 'limit' => 500, 'burst' => 20, ], 'api/v1/orders' => [ 'limit' => 200, 'burst' => 10, ],
-
自定义响应消息
通过修改配置中的
response_messages
键来自定义超过速率限制时返回的消息。
'response_messages' => [ 'rate_limit_exceeded' => 'Too many requests. Please try again later.', ],
测试
使用Postman或cURL等工具测试速率限制功能。向API端点发送多个请求,以确保速率限制和突发设置按预期工作。
结论
此包提供了灵活且强大的方法来管理Laravel应用程序中的API请求速率,确保公平使用并防止滥用。有关任何问题或贡献,请参阅包仓库。