1 个不稳定版本

0.0.1 2023年10月11日

#19 in #nova

MIT/Apache

91KB
1.5K SLoC

nova

nova_web - 使用 Rust 编写的 Web 服务器框架

crates.io Documentation MIT or Apache 2.0 licensed MSRV
CI downloads Dependency Status

关于此包的更多信息可以在 包文档 中找到。
使用示例可以在 这里 找到。文档中也包含代码片段。

包功能

  • 无宏的路由处理
  • 用于解析请求体的 serde 集成
  • [待办] 通过宏注册的处理程序
  • [待办] OpenApi 支持
  • 自定义 Middleware 集成
  • [待办] 自定义依赖注入集成

[待办] 自定义中间件包括预实现的常用中间件,如 [middleware..]。
自定义依赖注入提供了一种控制依赖项(如数据库连接或其他外部集成)的灵活性。

使用示例

在 Cargo.toml 中

[dependencies]
nova_web = "0.0.1"
tokio = "1.32"
serde = { version = "1.0", features = ["derive"] }
use nova_web::prelude::*;

#[derive(Debug, Deserialize, Serialize)]
struct RequestBody {
    id: String,
    name: String,
}

fn hello_world(_: &HttpRequest, res: &mut HttpResponse) -> ServerResponse {
    Ok(res
        .status(HttpStatus::OK)
        .body("Hello, world!".as_bytes()))
}

fn hello_json(req: &HttpRequest, res: &mut HttpResponse) -> ServerResponse {
    let body: RequestBody = req.json()?;
    Ok(res
        .status(HttpStatus::OK)
        .body(format!("Hello, {}!", body.name).as_bytes()))
}

#[tokio::main]
async fn main() -> Result<(), ServerError> {
    Server::create("0.0.0.0", 3000)
        .service("/hello", vec![
            get("/", hello_world),
            post("/json", hello_json),
        ].into())
        .bind()
        .await
}

性能

[待办] 准备基准测试

安全性

此包在 #![forbid(unsafe_code)] 上使用限制性 linter 设置,以确保源代码的安全性和清晰性。

最低支持的 Rust 版本

MSRV 对于 nova 是 1.63

示例

使用示例可以在 这里 找到。文档中也包含代码片段。
[待办] 更多示例、代码片段和信息可以在 wiki 上找到。

许可证

该项目采用 Apache 许可证MIT 许可证

贡献

除非明确声明,否则任何有意提交以包含在 nova 中的贡献,均应按 Apache 或 MIT 许可,无需任何附加条款或条件。

依赖项

~7–15MB
~186K SLoC