简介
为防止滥用,你应该考虑对您的 API 限流。例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429
(这意味着过多的请求)。
安装
composer require tinywan/limit-traffic
使用
应用中间件
在
config/middleware.php
中添加全局中间件如下:
return [
// 全局中间件
'' => [
// ... 这里省略其它中间件
TinywanLimitTrafficMiddlewareLimitTrafficMiddleware::class,
],
// api应用中间件
'api' => [
TinywanLimitTrafficMiddlewareLimitTrafficMiddleware::class,
]
];
路由中间件
注意:需要
workerman/webman-framework
版本>= 1.0.12
我们可以给某个一个或某一组路由设置中间件。例如在 config/route.php
中添加如下配置:
Route::any('/admin', [appadmincontrollerIndex::class, 'index'])
->middleware([TinywanLimitTrafficMiddlewareLimitTrafficMiddleware::class]);
// 分组路由
Route::group('/blog', function () {
Route::any('/create', function () {return response('create');});
})->middleware([TinywanLimitTrafficMiddlewareLimitTrafficMiddleware::class]);
🔏 返回允许的请求的最大数目及时间
返回允许的请求的最大数目及时间,例如:
[100, 600]
表示在600
秒内最多100
次的 API 调
TinywanLimitTrafficRateLimiter::getRateLimit(); // 返回 [100, 600]
修改默认请求配置
config/plugin/tinywan/limit-traffic/app.php
🔰 请求限制参考
当速率限制被激活,默认情况下每个响应将包含以下 HTTP 头发送目前的速率限制信息

响应HTTP状态码
-
Http Status 429
响应
header
返回内容
-
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
)
自定义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": "请求太多请稍后重试"
}
其他的可以根据自身业务自定义即可
原文始发于微信公众号(开源技术小栈):Webman实战教程:基于 Lua 脚本简单限流插件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/248237.html