15 个不稳定版本 (3 个破坏性更新)

使用旧的 Rust 2015

0.3.7 2019 年 4 月 10 日
0.3.6 2019 年 3 月 13 日
0.3.5 2019 年 2 月 25 日
0.3.3 2018 年 11 月 18 日
0.0.0 2018 年 3 月 11 日

#1298 in HTTP 服务器

Download history 79/week @ 2024-03-14 94/week @ 2024-03-21 150/week @ 2024-03-28 93/week @ 2024-04-04 80/week @ 2024-04-11 91/week @ 2024-04-18 81/week @ 2024-04-25 101/week @ 2024-05-02 77/week @ 2024-05-09 139/week @ 2024-05-16 124/week @ 2024-05-23 129/week @ 2024-05-30 66/week @ 2024-06-06 155/week @ 2024-06-13 93/week @ 2024-06-20 50/week @ 2024-06-27

每月 380 次下载
5 crates 中使用

MIT 许可证

430KB
11K SLoC

塔-web

一个专注于去除样板代码的 Rust Web 框架。

Build Status License: MIT Crates.io Gitter

API 文档

塔-web 是

  • 快速:完全异步,基于 TokioHyper
  • 易用:塔-web 将 HTTP 与应用程序逻辑解耦,去除所有样板代码。
  • 兼容 Rust 稳定版:您现在就可以使用它。

你好世界

#[macro_use]
extern crate tower_web;
extern crate tokio;

use tower_web::ServiceBuilder;
use tokio::prelude::*;

/// This type will be part of the web service as a resource.
#[derive(Clone, Debug)]
struct HelloWorld;

/// This will be the JSON response
#[derive(Response)]
struct HelloResponse {
    message: &'static str,
}

impl_web! {
    impl HelloWorld {
        #[get("/")]
        #[content_type("json")]
        fn hello_world(&self) -> Result<HelloResponse, ()> {
            Ok(HelloResponse {
                message: "hello world",
            })
        }
    }
}

pub fn main() {
    let addr = "127.0.0.1:8080".parse().expect("Invalid address");
    println!("Listening on http://{}", addr);

    ServiceBuilder::new()
        .resource(HelloWorld)
        .run(&addr)
        .unwrap();
}

概览

塔-web 致力于将所有 HTTP 概念与应用程序逻辑解耦。您定义一个 "普通的 Rust 方法" (PORM?)。此方法仅接受其完成所需的数据,并返回一个表示响应的结构体。塔-web 做其余的工作。

impl_web 宏会查看定义并生成粘合代码,使方法能够响应 HTTP 请求。

入门指南

最佳入门方法是阅读 示例API 文档

许可证

本项目受 MIT 许可证 的许可。

贡献

除非您明确声明,否则您故意提交给 tower-web 的任何贡献,都应按 MIT 许可证许可,无任何附加条款或条件。

依赖项

~21MB
~402K SLoC