tinywan/limit-traffic
Composer 安装命令:
composer require tinywan/limit-traffic
包简介
limiting and controlling traffic for webman plugin
README 文档
README
为防止滥用,你应该考虑对您的 API 限流。 例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。
安装
composer require tinywan/limit-traffic
使用
应用中间件
在 config/middleware.php 中添加全局中间件如下:
return [ // 全局中间件 '' => [ // ... 这里省略其它中间件 Tinywan\LimitTraffic\Middleware\LimitTrafficMiddleware::class, ], // api应用中间件 'api' => [ Tinywan\LimitTraffic\Middleware\LimitTrafficMiddleware::class, ] ];
路由中间件
注意:需要
workerman/webman-framework版本>= 1.0.12
我们可以给某个一个或某一组路由设置中间件。例如在 config/route.php 中添加如下配置:
Route::any('/admin', [app\admin\controller\Index::class, 'index']) ->middleware([Tinywan\LimitTraffic\Middleware\LimitTrafficMiddleware::class]); // 分组路由 Route::group('/blog', function () { Route::any('/create', function () {return response('create');}); })->middleware([Tinywan\LimitTraffic\Middleware\LimitTrafficMiddleware::class]);
🔏 返回允许的请求的最大数目及时间
返回允许的请求的最大数目及时间,例如:[100, 600] 表示在 600 秒内最多 100 次的 API 调
Tinywan\LimitTraffic\RateLimiter::getRateLimit(); // 返回 [100, 600]
⚠ 请求限制参考
🔰 响应参数详解
X-Rate-Limit-Limit同一个时间段所允许的请求的最大数目X-Rate-Limit-Remaining在当前时间段内剩余的请求的数量X-Rate-Limit-Reset为了得到最大请求数所等待的秒数
自定义自己的 Response
使用场景
- 每个项目有标准的统一输出,自定义返回内容
- 前后端分离:前端要求返回的
HTTP状态码并不是429,而是200或者其他 - 响应的
body不是{"code":0,"msg":"Too Many Requests"},而是{"error_code":200,"message":"Too Many Requests"}等其他内容
自定义HTTP状态码
编辑 config/plugin/tinywan/limit-traffic/app.php 文件的 status HTTP 状态码(默认值是 429)
自定义限流键
编辑 config/plugin/tinywan/limit-traffic/app.php 文件的 limit_key 限流键(默认值是 none)
none 代表以ip作为限流键get.id 代表以get请求的id作为限流键post.access 代表以post请求的access作为限流键header.token 代表以header请求的token作为限流键
自定义body返回内容
编辑 config/plugin/tinywan/limit-traffic/app.php 文件的 body 的字段
默认选项是
{
"code": 0,
"msg": "Too Many Requests",
"data": null
}
自定义选项参考一
1、假设status HTTP 状态码设置为 200
2、假设body的数组设为为
'body' => [ 'error_code' => 200, 'message' => '请求太多请稍后重试' ]
则响应内容为
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "error_code": 200, "message": "请求太多请稍后重试" }
其他的可以根据自身业务自定义即可
Other
vendor/bin/phpstan analyse src vendor/bin/php-cs-fixer fix src
tinywan/limit-traffic 适用场景与选型建议
tinywan/limit-traffic 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.96k 次下载、GitHub Stars 达 18, 最近一次更新时间为 2022 年 03 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「plugin」 「traffic」 「limit」 「webman」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 tinywan/limit-traffic 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tinywan/limit-traffic 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 tinywan/limit-traffic 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
CakePHP 4.x AdminLTE Theme.
Rapid pagination without using OFFSET
Limit number of records that can be added to a SilverStripe GridField
PHP PDO Mysql select statement iterator implemented as multiple queries using LIMIT clauses
Magento 2 Discount Amount Limiter
Lightweight traffic tracking for CodeIgniter 4
统计信息
- 总下载量: 1.96k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 18
- 点击次数: 20
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-03-30
