| Crates.io | rweb |
| lib.rs | rweb |
| version | 0.15.0 |
| created_at | 2020-01-17 13:31:17.683914+00 |
| updated_at | 2021-10-31 14:39:41.815241+00 |
| description | Yet another web server framework for rust |
| homepage | |
| repository | https://github.com/kdy1/rweb.git |
| max_upload_size | |
| id | 199351 |
| size | 212,591 |
Yet another web server framework for rust.
Installation:
[dependencies]
rweb = "0.6"
tokio = "1"
Installation (with automatic openapi generation):
[dependencies]
rweb = { version = "0.6", features = ["openapi"] }
serde = "1"
tokio = "1"
Since rweb is based on warp, which features safety and correctness, rweb has same property.
use rweb::*;
use serde::{Serialize, Deserialize};
#[get("/output")]
fn output() -> String {
String::from("this returns 200 with text/plain mime type")
}
#[derive(Debug, Serialize, Deserialize, Schema)]
struct Product {
id: String,
title: String,
}
#[get("/products")]
fn products() -> Json<Vec<Product>> {
// ...
// This returns 200 with application/json
}
#[get("/products/{id}")]
fn product(id: String) -> Json<Product> {
// ...
// This returns 200 with application/json
}
#[get("/product")]
fn new_product(_product: Json<Product>) -> Json<Product> {
// ...
// This returns 200 with application/json
}
#[derive(Debug, Serialize, Deserialize, Schema)]
struct SearchOption {
query: String,
limit: usize,
page_token: String,
}
#[get("/search")]
fn search(_product: Query<SearchOption>) -> Json<Vec<Product>> {
// ...
// This returns 200 with application/json
}
#[tokio::main]
async fn main() {
serve(output().or(product()).or(products()).or(search())).run(([127, 0, 0, 1], 3030)).await;
}
If you want to use websocket, just declare a parameter typed Ws. It's all.
use rweb::*;
#[get("/ws")]
fn example(ws: ws::Ws) -> String {
String::new("use ws.on_upgrade or extra")
}
rweb supports automatically generating openapi specification file based on your code.
See: documentation for usage.
// Build openapi for your API
let (spec, filter) = openapi::spec().build(move || {
// Your API's filters
math::math()
.or(products::products())
.or(generic::body())
.or(generic::optional())
.or(generic::search())
.or(response::response())
});
println!("go to http://localhost:3030/docs to interact with your openapi!");
serve(filter.or(openapi_docs(spec)))
.run(([127, 0, 0, 1], 3030))
.await;
| Name | rweb | actix-web | gotham | iron | nickel | rocket | rouille | Thruster | Tide | tower-web | warp |
|---|---|---|---|---|---|---|---|---|---|---|---|
| License | |||||||||||
| Version | |||||||||||
| Recent downloads | |||||||||||
| Github stars | |||||||||||
| Contributors | |||||||||||
| Activity | |||||||||||
| Base framework | hyper / warp | tokio | hyper | hyper | hyper | hyper | tiny-http | tokio | hyper | hyper | hyper |
| https | Y | Y | Y | ? | ? | ? | ? | ? | ? | ? | Y |
| http 2 | Y | Y | ? | ? | ? | ? | ? | ? | ? | ? | Y |
| async | Y | Y | Y | Y | Y | Y | Y (via different method) | ||||
| stable rust | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | |
| openapi support | Y |