32个版本 (12个破坏性更新)

0.15.0 2021年10月31日
0.13.0 2021年8月5日
0.12.5 2021年7月4日
0.6.1 2021年3月15日
0.5.0 2020年3月31日

#654 in HTTP服务器

Download history 512/week @ 2024-03-14 1164/week @ 2024-03-21 848/week @ 2024-03-28 591/week @ 2024-04-04 429/week @ 2024-04-11 422/week @ 2024-04-18 413/week @ 2024-04-25 337/week @ 2024-05-02 139/week @ 2024-05-09 359/week @ 2024-05-16 525/week @ 2024-05-23 469/week @ 2024-05-30 466/week @ 2024-06-06 453/week @ 2024-06-13 371/week @ 2024-06-20 532/week @ 2024-06-27

1,923 每月下载量
3 crates 中使用

Apache-2.0

84KB
1.5K SLoC

rweb

Build Status

针对Rust的另一个Web服务器框架。

安装

[dependencies]
rweb = "0.6"
tokio = "1"

安装(带有自动openapi生成)

[dependencies]
rweb = { version = "0.6", features = ["openapi"] }
serde = "1"
tokio = "1"

功能

  • 安全 & 正确

由于 rweb 基于具有安全性和正确性的 warp,因此 rweb 也具有相同的属性。

  • 易于阅读的代码
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;
}

  • WebSocket

如果您想使用WebSocket,只需声明一个类型为 Ws 的参数即可。就是这样。

use rweb::*;

#[get("/ws")]
fn example(ws: ws::Ws) -> String {
    String::new("use ws.on_upgrade or extra")
}
  • 自动openapi规范生成

rweb支持根据您的代码自动生成openapi规范文件。

请参阅:文档 了解用法。

  • openapi的API UX交互
// 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 https://127.0.0.1:3030/docs to interact with your openapi!");
serve(filter.or(openapi_docs(spec)))
    .run(([127, 0, 0, 1], 3030))
    .await;

比较

名称 rweb actix-web gotham iron nickel rocket rouille Thruster Tide tower-web warp
许可证 license license license license license license license license license license license
版本 version version version version version version version version version version version
最近下载 recent downloads recent downloads recent downloads recent downloads recent downloads recent downloads recent downloads recent downloads recent downloads recent downloads recent downloads
Github星星 github stars github stars github stars github stars github stars github stars github stars github stars github stars github stars github stars
贡献者 contributors contributors contributors contributors contributors contributors contributors contributors contributors contributors contributors
活动 activity activity activity activity activity activity activity activity activity activity activity
基础框架 hyper / warp tokio hyper hyper hyper hyper tiny-http tokio hyper hyper hyper
https Y Y Y ? ? ? ? ? ? ? Y
http 2 Y Y ? ? ? ? ? ? ? ? Y
异步 Y Y Y Y Y Y Y (通过不同的方法)
稳定的Rust Y Y Y Y Y Y Y Y Y Y
支持openapi Y

依赖项

~10–24MB
~345K SLoC