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服务器
1,923 每月下载量
在 3 crates 中使用
84KB
1.5K SLoC
rweb
针对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 |
---|---|---|---|---|---|---|---|---|---|---|---|
许可证 | |||||||||||
版本 | |||||||||||
最近下载 | |||||||||||
Github星星 | |||||||||||
贡献者 | |||||||||||
活动 | |||||||||||
基础框架 | 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