#async-http #http-framework #framework #web #http #async

obsidian

专为高效、可靠和卓越的Web而设计的舒适异步http框架

5个版本

0.2.2 2020年5月3日
0.2.1 2020年4月26日
0.1.0 2018年10月4日
0.1.0-alpha.12019年12月31日

#32 in #http-framework

每月下载量 35次

MIT许可证

105KB
2.5K SLoC

Obsidian Logo

Obsidian

Obsidian 是一个为可靠和高效Web而设计的舒适Rust异步http框架。

你好世界

use obsidian::{context::Context, App};

#[tokio::main]
async fn main() {
    let mut app: App = App::new();
    let addr = ([127, 0, 0, 1], 3000).into();

    app.get("/", |ctx: Context| async { ctx.build("Hello World").ok() });

    app.listen(&addr, || {
        println!("server is listening to {}", &addr);
    }).await;
}

你好世界(带处理函数)

use obsidian::{context::Context, App, ContextResult};

async fn hello_world(ctx: Context) -> ContextResult {
    ctx.build("Hello World").ok()
}


#[tokio::main]
async fn main() {
    let mut app: App = App::new();
    let addr = ([127, 0, 0, 1], 3000).into();

    app.get("/", hello_world);

    app.listen(&addr, || {
        println!("server is listening to {}", &addr);
    })
    .await;
}

JSON响应

use obsidian::{context::Context, App, ContextResult};
use serde::*;

async fn get_user(ctx: Context) -> ContextResult {
    #[derive(Serialize, Deserialize)]
    struct User {
        name: String,
    };

    let user = User {
        name: String::from("Obsidian"),
    };
    ctx.build_json(user).ok()
}

#[tokio::main]
async fn main() {
    let mut app: App = App::new();
    let addr = ([127, 0, 0, 1], 3000).into();

    app.get("/user", get_user);

    app.listen(&addr, || {
        println!("server is listening to {}", &addr);
    })
    .await;
}

示例文件

示例位于 example/main.rs

运行示例

cargo run --example example

当前状态

尚未准备好生产!

依赖关系

~14–28MB
~402K SLoC