2 个版本
0.1.1 | 2019 年 10 月 20 日 |
---|---|
0.1.0 | 2019 年 10 月 20 日 |
#12 in #rate-limit
每月下载 22 次
在 limitation-proxy 中使用
73KB
494 行
limitation-actix-middleware
CI | |
最新版本 | |
文档 | |
包下载量 | |
许可证 |
目录
使用基于头的固定窗口计数器进行请求速率限制的 Actix 网页中间件。
使用方法
将 limitation-actix-middleware
添加到您的 Cargo.toml
[dependencies]
limitation-actix-middleware = "0.1.1"
快速示例
RateLimiter
中间件是主要类型,旨在插入 Actix 网页应用程序的中间件链。中间件需要存在 2 个 Data
类型
- 一个
HeaderName
,作为速率限制键使用的头 - 一个
Limiter
,执行速率限制并管理持久性
use actix_web::{http::header::HeaderName, web, App, HttpResponse};
use limitation_actix_middleware::{Limiter, RateLimiter};
// Choose a header to use for rate limit tracking
let header = web::Data::new(HeaderName::from_static("authorization"));
// Build a `Limiter` which will be used by the middleware
let limiter = web::Data::new(Limiter::build("redis://127.0.0.1/").finish()?);
let app = App::new()
// Register the header as application data
.register_data(header.clone())
// Register the Limiter as application data
.register_data(limiter.clone())
// Insert the RateLimter middleware
.wrap(RateLimiter)
.service(
web::resource("/test")
.route(web::get().to(|| HttpResponse::Ok()))
.route(web::head().to(|| HttpResponse::MethodNotAllowed()))
);
示例
此crate附带一个名为 catchall 的示例程序,可以从源代码运行
$ cargo run --example catchall
CI 状态
构建(master 分支)
操作系统 | 稳定 Rust | 夜间 Rust | MSRV |
---|---|---|---|
FreeBSD | |||
Linux | |||
macOS | |||
Windows |
测试(master 分支)
操作系统 | 稳定 Rust | 夜间 Rust | MSRV |
---|---|---|---|
FreeBSD | |||
Linux | |||
macOS | |||
Windows |
检查(master 分支)
状态 | |
---|---|
代码检查 | |
格式化 |
行为准则
本项目遵循贡献者公约 行为准则。通过参与,您应遵守此准则。如有不适当的行为,请通过 [email protected] 报告。
问题
如果您对此项目有任何问题或疑问,请通过 GitHub 问题 联系我们。
贡献
欢迎您为新的功能、修复或更新做出贡献,无论大小;我们总是很高兴收到拉取请求,并尽可能快地处理它们。
在开始编码之前,我们建议通过 GitHub issue 讨论您的计划,尤其是对于更雄心勃勃的贡献。这给其他贡献者一个机会为您指明正确的方向,对您的设计提供反馈,并帮助您了解是否有人正在做同样的事情。
发布历史
查看 变更日志 以获取完整的发布历史。
作者
由 Fletcher Nichol ([email protected]) 创建和维护。
许可证
许可协议为 Mozilla Public License Version 2.0 (LICENSE.txt)。
除非您明确声明,否则您有意提交以包含在您的工作中的任何贡献,根据 MPL-2.0 许可证定义,将按照上述方式许可,不附加任何额外的条款或条件。
依赖项
约 26MB
约 568K SLoC