Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yansongda/rate-limit-bundle
rate limiter for symfony 4
https://github.com/yansongda/rate-limit-bundle
rate-limiter rate-limiting redis symfony symfony-bundle
Last synced: 29 days ago
JSON representation
rate limiter for symfony 4
- Host: GitHub
- URL: https://github.com/yansongda/rate-limit-bundle
- Owner: yansongda
- Created: 2018-12-10T02:04:41.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2018-12-13T14:54:34.000Z (almost 6 years ago)
- Last Synced: 2024-10-03T07:05:49.974Z (about 2 months ago)
- Topics: rate-limiter, rate-limiting, redis, symfony, symfony-bundle
- Language: PHP
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Rate-Limit-Bundle
主要提供了路由限流功能,限流的参数可由自定义函数动态进行控制
## 运行环境
- php 7.1+
- symfony 4
- composer
- redis## 功能
- 静态限流
- 动态限流
- 根据 ip + 路由 进行限制## 安装
`composer require yansongda/rate-limit-bundle -vvv`
## 概要
根据 IP + 路由名 进行确定特定的客户端,通过 redis 进行限流记录。
## 使用
### 静态限流
```php
*
* @Route("/test", name="test")
* @Throttle(limit=2, period=60)
*
* @return mixed
*/
public function testAction()
{
return JsonResponse::create(['code' => 0]);
}
}
```### 动态限流
```php
*
* @Route("/test", name="token")
* @Throttle(limit=2, period=60, custom={"App\Throttles\CustomLimitPeriod", "token"})
*
* @return mixed
*/
public function tokenAction()
{
return JsonResponse::create(['code' => 0]);
}
}
``````php
* @param Request $request 此参数回调时自动载入
*
* @return array
*/
public function token(Request $request)
{
// 返回的数据中,第一个为 limit,第二个为 period,必须为 int 类型。如果 limit 返回 -1 则无限制
return [20, 60];
}
}
```## 配置
下面是默认的配置信息。如果需要更改,在 config 的 packages 目录下新建一个 yml 文件,然后复制以下内容更改即可。
```yaml
yansongda_rate_limit:
# 是否开启
enable: true
# snc_redis 客户端
redis_client: default
# 是否展示 headers
display_headers: true
# headers 的 key
headers:
limit: X-RateLimit-Limit
remaining: X-RateLimit-Remaining
reset: X-RateLimit-Reset
# response 内容,如果 exception 不为 null,则默认抛出写入的 exception
response:
message: 'Out Of Limit'
code: 429
exception: null
```