generalfocus/limitshield

LimitShield 是一个中间件软件包,旨在高效地管理和执行 API 速率限制。

1.0.2 2024-06-10 17:47 UTC

This package is auto-updated.

Last update: 2024-09-11 11:26:01 UTC


README

LimitShield 是一个 Laravel 中间件软件包,旨在高效地管理和执行 API 速率限制。它提供可配置的速率限制,支持基于 IP 和基于用户的限制,可以无缝集成 Redis 以实现分布式速率限制,并提供了对违规响应的灵活性。

特性

  • 可配置的速率限制
  • 基于 IP 和基于用户的限制
  • Redis 集成以实现分布式速率限制
  • 可自定义的速率限制违规响应

安装

要求

  • PHP ^7.4|^8.0
  • Laravel ^8.0|^9.0|^10.0|^11.0
  • Redis(用于分布式速率限制)

分步安装

  1. 需求包

    使用 Composer 将 LimitShield 添加到您的 Laravel 项目中

    composer require generalfocus/limitshield:*
  2. 发布配置

    发布配置文件以自定义设置

    php artisan vendor:publish --provider="GeneralFocus\LimitShield\Providers\PackageServiceProvider" --tag="config"
  3. 配置中间件

    RateLimitMiddleware 添加到您的 HTTP 核心中。编辑 app/Http/Kernel.php

    protected $routeMiddleware = [
        // Other middleware
        'rate.limit' => \GeneralFocus\LimitShield\Http\Middleware\RateLimitMiddleware::class,
    ];

用法

将中间件应用于路由

您可以将速率限制中间件应用于特定的路由或路由组

use Illuminate\Support\Facades\Route;

Route::middleware('rate.limit')->group(function () {
    Route::get('/api/resource', 'ApiResourceController@index');
});

或者,您可以直接在路由定义中应用中间件

use Illuminate\Support\Facades\Route;

Route::get('/api/resource', 'ApiResourceController@index')->middleware('rate.limit:limit=100,duration=60');

配置限制

编辑 config/limitshield.php 文件以设置所需的速率限制和其他配置

return [
    'limits' => [
        'global' => [
            'enabled' => true,
            'max_requests' => 100,
            'decay_minutes' => 1,
        ],
        'ip' => [
            'enabled' => true,
            'max_requests' => 50,
            'decay_minutes' => 1,
        ],
        'user' => [
            'enabled' => true,
            'max_requests' => 200,
            'decay_minutes' => 1,
        ],
    ],
    'redis' => [
        'connection' => 'default',
    ],
    'response' => [
        'message' => 'Too many requests, please try again later.',
        'retry_after' => 'Retry-After',
    ],
];

贡献

指南

  1. 分叉存储库。
  2. 创建一个新分支(git checkout -b feature/YourFeature)。
  3. 提交您的更改(git commit -am 'Add some feature')。
  4. 推送到分支(git push origin feature/YourFeature)。
  5. 创建一个新的拉取请求。

此 README 提供了有关在 Laravel 应用程序中安装、配置和使用 LimitShield 的全面说明。欢迎您为其开发贡献力量并提高其功能!