# rate-limit-bundle
**Repository Path**: yansongda/rate-limit-bundle
## Basic Information
- **Project Name**: rate-limit-bundle
- **Description**: 限流服务 for symfony 4
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2018-12-11
- **Last Updated**: 2024-04-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## 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
```