全书目录

第三十九篇:Axum 完全指南 —— Rust 类型关口宇宙

第五章:Handler 是什么 —— 每个窗口其实就是一个 async 函数

1 分钟 258 字 第 751 / 962 个阅读单元

Axum 的 handler 很朴素:

一个 async fn,拿若干提取器当参数,返回任何能转成响应的东西。

比如:

rust
use axum::{http::StatusCode, Json};
use serde::Serialize;

#[derive(Serialize)]
struct Health {
    ok: bool,
    service: &'static str,
}

async fn health() -> (StatusCode, Json<Health>) {
    (
        StatusCode::OK,
        Json(Health {
            ok: true,
            service: "north-gate",
        }),
    )
}

Axum 官方对 handler 的定义非常稳定:

text
Handler
= async fn
+ 0 个或多个 extractor 参数
+ 返回一个 IntoResponse

也就是说,你写的不是“框架专用对象”,而是一个签名很清楚的 Rust 异步函数。

这会带来两个很大的好处:

  • 读代码时,窗口需要什么材料,一眼就在函数参数里
  • 写代码时,回执长什么样,一眼就在返回类型里

所以 Axum 的 handler 心智,不是“我在框架里塞逻辑”,而是:

我在写一个检查窗口,它显式声明自己要收哪些证件,最后吐出怎样的回执。