# rweb
[](https://travis-ci.com/kdy1/rweb)
Yet another web server framework for rust.
Installation (without automatic openapi generation):
```toml
[dependencies]
rweb = "0.5"
tokio = "0.2"
```
# Features
- Safe & Correct
Since `rweb` is based on [warp][], which features safety and correctness, `rweb` has same property.
- Easy to read code
```rust
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>> {
panic!() // This returns 200 with application/json
}
#[get("/products/{id}")]
fn product(id: String) -> Json<Product> {
panic!() // This returns 200 with application/json
}
#[get("/product")]
fn new_product(_product: Json<Product>) -> Json<Product> {
panic!() // 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>> {
panic!() // 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;
}
```
- Websocket
If you want to use websocket, just declare a parameter typed `Ws`. It's all.
```rust
use rweb::*;
#[get("/ws")]
fn example(ws: ws::Ws) -> String {
String::new("use ws.on_upgrade or extra")
}
```
- Automatic openapi spec generation
rweb supports automatically generating openapi specification file based on your code.
See: [docuementation](https://docs.rs/rweb/0.3.0-alpha.1/rweb/openapi/index.html) for usage.
# Comparison
| 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 | | | | | | | | | | |
[warp]: https://github.com/seanmonstar/warp