24 个版本 (12 个重大更新)

0.14.0 2021 年 10 月 31 日
0.12.0 2021 年 8 月 5 日
0.11.3 2021 年 7 月 4 日
0.5.0 2021 年 2 月 26 日
0.4.0 2020 年 1 月 25 日

#2105过程宏

Download history 510/week @ 2024-03-14 1173/week @ 2024-03-21 851/week @ 2024-03-28 593/week @ 2024-04-04 432/week @ 2024-04-11 427/week @ 2024-04-18 415/week @ 2024-04-25 339/week @ 2024-05-02 145/week @ 2024-05-09 362/week @ 2024-05-16 529/week @ 2024-05-23 467/week @ 2024-05-30 465/week @ 2024-06-06 462/week @ 2024-06-13 374/week @ 2024-06-20 536/week @ 2024-06-27

每月 1,939 次下载
4 个 Crates 中使用 (通过 rweb)

Apache-2.0

90KB
2K SLoC

rweb

Build Status

又一个 Rust 网络服务器框架。

安装

[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

依赖项

~4.5MB
~114K SLoC