mirror of
https://github.com/actix/actix-extras.git
synced 2025-06-26 10:27:42 +02:00
adopt actix-limitation crate (#229)
* import code from actix-limitation master branch * fix compilation * update legal info * fix compile errors * ignore failing tests * remove futures dep * add changelog * update readme * fix doc test example
This commit is contained in:
51
actix-limitation/README.md
Normal file
51
actix-limitation/README.md
Normal file
@ -0,0 +1,51 @@
|
||||
# actix-limitation
|
||||
|
||||
> Rate limiter using a fixed window counter for arbitrary keys, backed by Redis for Actix Web.
|
||||
> Originally based on <https://github.com/fnichol/limitation>.
|
||||
|
||||
[](https://crates.io/crates/actix-limitation)
|
||||
[](https://docs.rs/actix-limitation/0.1.4)
|
||||

|
||||
[](https://deps.rs/crate/actix-limitation/0.1.4)
|
||||
|
||||
## Examples
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
actix-limitation = "0.1.4"
|
||||
actix-web = "4"
|
||||
```
|
||||
|
||||
```rust
|
||||
use std::time::Duration;
|
||||
use actix_web::{get, web, App, HttpServer, Responder};
|
||||
use actix_limitation::{Limiter, RateLimiter};
|
||||
|
||||
#[get("/{id}/{name}")]
|
||||
async fn index(info: web::Path<(u32, String)>) -> impl Responder {
|
||||
format!("Hello {}! id:{}", info.1, info.0)
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
let limiter = web::Data::new(
|
||||
Limiter::build("redis://127.0.0.1")
|
||||
.cookie_name("session-id".to_owned())
|
||||
.session_key("rate-api-id".to_owned())
|
||||
.limit(5000)
|
||||
.period(Duration::from_secs(3600)) // 60 minutes
|
||||
.finish()
|
||||
.expect("Can't build actix-limiter"),
|
||||
);
|
||||
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.wrap(RateLimiter)
|
||||
.app_data(limiter.clone())
|
||||
.service(index)
|
||||
})
|
||||
.bind("127.0.0.1:8080")?
|
||||
.run()
|
||||
.await
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user