osid/laravel-api-rate-limiter

一个强大的Laravel API速率限制和节流包。

v1.0.1 2024-06-06 14:05 UTC

This package is auto-updated.

Last update: 2024-09-06 14:43:19 UTC


README

一个强大的Laravel API速率限制和节流包,旨在管理和控制对API的请求流量,防止滥用并确保公平使用。

安装

  1. 需要此包

    运行以下命令通过Composer安装此包

    composer require osid/laravel-api-rate-limiter
  2. 发布配置

    使用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:指定要使用的缓存驱动器(例如,redismemcached)。
  • 响应消息

    • 自定义超过速率限制时的响应消息。

应用中间件

要将速率限制中间件应用于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
});

示例用法

  1. 全局速率限制

    要应用全局速率限制,请确保在config/api-rate-limiter.php中设置了global配置。这将应用于未特别配置的所有路由。

  2. 路由特定速率限制

    要将速率限制应用于特定路由,请在config/api-rate-limiter.php中的routes键下定义它们。

'api/v1/users' => [
    'limit' => 500,
    'burst' => 20,
],
'api/v1/orders' => [
    'limit' => 200,
    'burst' => 10,
],
  1. 自定义响应消息

    通过修改配置中的response_messages键来自定义超过速率限制时返回的消息。

'response_messages' => [
    'rate_limit_exceeded' => 'Too many requests. Please try again later.',
],

测试

使用Postman或cURL等工具测试速率限制功能。向API端点发送多个请求,以确保速率限制和突发设置按预期工作。

结论

此包提供了灵活且强大的方法来管理Laravel应用程序中的API请求速率,确保公平使用并防止滥用。有关任何问题或贡献,请参阅包仓库。