Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: 1 day ago
JSON representation

rate limiter for symfony 4

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
```