Salvo:“可组合工程结构”的 Rust Web 框架

Salvo 是一款简洁却功能强大的 Rust 网络框架,即便你仅掌握基础的 Rust 知识,也能借助它快速搭建支持 HTTP/1–3、WebSocket/WebTransport 协议的现代化服务器。该框架基于 Hyper 与 Tokio 构建,采用统一的处理器 / 中间件模型,配备可无限嵌套、支持链式调用的路由系统(能清晰划分公共 / 私有路由分组),还内置了多部分表单 / 文件上传、数据提取功能,可自动生成 OpenAPI 文档,并支持 ACME 协议的 TLS 证书配置,同时提供命令行工具(CLI)用于快速搭建项目骨架。借助 Salvo,你能够以更少的样板代码、更简洁的路由配置、更便捷的测试流程和 API 文档管理,快速完成高性能、高安全性后端的原型开发与部署。

在 Rust 生态中,Web 框架从来不缺“快”和“简”,但真正围绕工程结构、可维护性与类型安全展开系统设计的框架并不多。
Salvo 正是这样一个项目。

它并不试图用最少的代码完成 Demo,而是明确面向一个问题:

如何用 Rust 构建长期可维护、结构清晰、性能可靠的 Web 服务?

另一个 Rust Web 框架?

如果你接触过 Rust Web 生态,可能已经见过这些问题:

  • 路由、参数、校验分散在各处
  • 中间件堆叠后难以追踪执行顺序
  • 项目一大,逻辑结构开始“塌陷”
  • Handler 和基础设施强耦合,难以复用

Salvo 的设计并不是为了解决“能不能写 Web 服务”,
而是为了回答一个更偏工程的问题:

Web 请求,是否可以被建模成一条清晰、可组合、类型安全的处理链?

一切都是 Handler,一切都可以组合

Salvo 的核心抽象非常直接:

  • 请求处理的每一步,都是一个 Handler
  • Handler 可以像函数一样组合、嵌套、复用

这意味着:

  • 路由 ≠ 控制器
  • 中间件 ≠ 特殊机制
  • 校验 / 鉴权 / 日志 都只是处理链上的一环

在 Salvo 中,你不是“往框架里塞逻辑”,
而是在搭建一条显式的请求流

强类型不是“加分项”,而是基本前提

Salvo 深度利用 Rust 的类型系统:

  • Path / Query / Body 都可以直接映射为结构体
  • 校验逻辑可以在类型层完成
  • 很多错误在 编译期就被消灭

这种体验非常接近“后端版的强类型 DSL”:

  • 你描述的是 数据结构
  • 框架负责 约束和连接

相比运行时报错的 Web 框架,这种方式更接近“工程工具”而不是“脚本工具”。

中间件不是魔法,而是显式结构

在很多框架里,中间件像一层“看不见的雾”:

  • 顺序靠记忆
  • 行为靠文档
  • Debug 靠猜

Salvo 刻意避免这种设计。

中间件在 Salvo 中:

  • 是普通 Handler
  • 有明确的组合位置
  • 可以局部生效,而不是全局污染

这让复杂服务在结构上仍然可读、可追踪、可重构

异步只是基础,而不是卖点

Salvo 基于 Tokio 的 async/await 体系:

  • 支持高并发 I/O
  • 零成本抽象
  • 性能上限由 Rust 决定,而不是框架本身

但它并不把“性能”当作唯一卖点。
相比极端 Benchmark,Salvo 更关注:

当服务跑一年、代码翻十倍时,它还能不能被理解?

Salvo 适合什么样的项目?

从定位上看,Salvo 更适合:

  • 中大型 Web API 项目
  • 微服务 / 内部服务
  • 需要长期维护的工程
  • 对结构、类型、安全性有要求的团队或个人

如果你只是想“快速起一个接口”,它可能不是最省力的选择。
但如果你希望写出来的代码本身就像一份设计文档,Salvo 会非常顺手。

更准确的类比

与其说 Salvo 是:

“另一个 Rust Web 框架”

不如说它更像:

把 Web 服务当成一条可组合、可推理的数据处理管线

这也是它最有价值的地方。

Github:https://github.com/salvo-rs/salvo
油管:https://youtu.be/ttt2P4w_Opc

Scroll to Top