当前位置: 首页 > article >正文

【Laravel】接口的访问频率限制器

Laravel 接口的访问频率,你可以在 Laravel 中使用速率限制器(Rate Limiter)。以下是一个详细的步骤,展示如何为这个特定的 API 路由设置速率限制:

1. 配置 RouteServiceProvider

首先,确保在 App\Providers\RouteServiceProvider 中配置速率限制器。你可以为特定的路由定义自定义速率限制器。

示例代码:
namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;

class RouteServiceProvider extends ServiceProvider
{
    protected function configureRateLimiting()
    {
        RateLimiter::for('manage_home', function (Request $request) {
            return Limit::perMinute(10)->by(optional($request->user())->id ?: $request->ip());
        });
    }

    public function map()
    {
        $this->configureRateLimiting();

        $this->mapApiRoutes();
    }

    protected function mapApiRoutes()
    {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }
}

2. 应用速率限制器到路由

routes/web.phproutes/api.php 中,使用 throttle 中间件来应用速率限制器到你的特定路由。

示例代码:
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ManageController;

Route::middleware(['throttle:manage_home'])->group(function () {
    Route::get('/manage/home', [ManageController::class, 'home']);
});

3. 创建控制器

假设你有一个 ManageController 来处理 /manage/home 路由请求。

示例代码:
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ManageController extends Controller
{
    public function home(Request $request)
    {
        // 执行你的逻辑
        return response()->json([
            'message' => 'Home management data',
            'data' => [
                // 你的数据
            ]
        ]);
    }
}

4. 测试速率限制

使用 Postman 或 cURL 来测试 /manage/home 路由的速率限制功能。

使用 Postman 测试:
  1. 打开 Postman。
  2. 创建一个新的 GET 请求,URL 为 http://your-app-url/manage/home
  3. 多次发送请求,超过每分钟 10 次后,你应该会收到一个 429 状态码的响应。
使用 cURL 测试:
for i in {1..15}; do curl -X GET http://your-app-url/manage/home; done

5. 自定义速率限制响应

你可以自定义当请求被限速时返回的响应。在 App\Exceptions\Handler.php 中,添加对 ThrottleRequestsException 的处理:

示例代码:
namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
use Illuminate\Http\Exceptions\ThrottleRequestsException;

class Handler extends ExceptionHandler
{
    public function render($request, Throwable $exception)
    {
        if ($exception instanceof ThrottleRequestsException) {
            return response()->json([
                'message' => 'Too many requests, please slow down.',
                'retry_after' => $exception->getHeaders()['Retry-After'],
            ], 429);
        }

        return parent::render($request, $exception);
    }
}

通过这些步骤,你可以在 Laravel 中为接口实现访问频率控制。


http://www.kler.cn/a/453113.html

相关文章:

  • 全面Kafka监控方案:从配置到指标
  • Ubuntu20.04 交叉编译Qt5.15.15 for rk3588
  • 华为管理变革之道:管理制度创新
  • WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
  • C语言基础——指针(4)
  • bypy上传配置
  • ViiTor实时翻译 2.2.1 | 完全免费的高识别率同声传译软件
  • 51c自动驾驶~合集43
  • mac_录屏
  • 【Java基础面试题026】Java中的String、StringBuffer和StringBuilder的区别是什么?
  • 如何在 Apache 中创建单个文件的别名 ?
  • Python经典面试21题
  • 贪心算法(三)
  • Maven-安装与环境配置
  • SQL进阶技巧:如何计算加油站问题? | LeetCode 134. 加油站
  • for媒体打破智能座舱体验同质化,斑马智行荣获“华舆奖”优秀创
  • Unity模型观察脚本
  • 使用Excel制作通达信自定义“序列数据“
  • cesium入门学习一
  • 江苏计算机专转本 技能Mysql知识点总结(一)
  • BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)
  • 【Stable Diffusion】SD Stable Diffusion 最新版本 4.10 安装包
  • K8s 不同层次的进程间通信实现
  • Linux高级--2.1.2 select poll epoll reactor
  • 中科岩创边坡自动化监测解决方案
  • 34.正则表达式