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