使用 Rust 开发 Web 服务
使用 Rust 开发 Web 服务
引言
作为一个长期从事 Java 的程序员,做 Web 服务开发时第一件事就是寻找成熟的 Web 和 ORM 框架。在 Rust 生态中,成熟的 Web 框架选择不少:
| 框架 | 特点 | 适用场景 |
|---|---|---|
| Actix-web | 性能极高(基于 actor 模型),生态丰富 | 高性能 API 服务、微服务 |
| Rocket | 开箱体验好,宏驱动 | 快速原型、全栈 Web |
| Warp | 基于过滤器链,类型安全 | 需要强路由编译期检查的场景 |
| Axum | Tokio 官方出品,异步原生 | 新项目首选 |
数据库访问层同样有多种选择:
| 方案 | 特点 |
|---|---|
| Diesel | 成熟稳定、同步阻塞,Rust 社区最老牌的 ORM |
| Sea-ORM | 后起之秀,支持异步,基于 sqlx 构建 —— 本案例选用 |
| sqlx | 轻量级,无 DSL,编译时 SQL 检查 |
为什么选 Sea-ORM?Diesel 不支持异步,而 Sea-ORM 天然适配 Rust 的异步生态。随着它不断成熟,越来越多新项目选择在其上构建。
Rust 以卓越的内存安全性和极致性能在编程社区中备受瞩目。结合成熟框架和 ORM,我们可以快速构建既安全又高效的 Web 服务。
一、Hello World
添加依赖
1 | [dependencies] |
返回 JSON 接口
现代 Web 应用通常采用前后端分离架构,通过 JSON 进行数据交互。下面实现一个返回 JSON 的接口——绑定 IP 为 0.0.0.0,允许任意地址访问:
1 | use actix_web::{get, web, Responder, Result}; |
运行后访问 http://localhost:8080/a/world 即可看到 JSON 响应。
二、封装统一响应格式
为了保持接口响应的一致性、可读性和可扩展性,通常需要封装统一的 JSON 响应格式。例如:
1 | { |
其中 code 为状态码,msg 为提示消息,data 承载具体业务数据。Java 中通常这样写:
1 | public class R<T> { |
Rust 实现
由于直接用泛型 T 无法表达”空值”语义(即无法生成 {"data": null, ...} 格式),我们用 Option\<T\> 包裹泛型来解决这个问题:
1 |
|
三、引入 ORM(Sea-ORM)
3.1 安装依赖
1 | sea-orm = { version = "0.12.15", features = ["sqlx-mysql", "runtime-actix-native-tls", "macros"], default-features = false } |
3.2 安装 CLI 工具并生成实体代码
1 | # 安装 sea-orm-cli 命令行工具 |
执行后会自动生成如下目录结构:

3.3 整合到 Actix-web
flowchart TD
A[客户端请求] --> B[Actix-web HTTP Server]
B --> C[Middleware 日志中间件]
C --> D{路由匹配}
D --> E[/app 接口]
E --> F[Handler 处理器]
F --> G[AppState 提取器<br/>获取 DB 连接]
G --> H[Sea-ORM DAO 层]
H --> I[(MySQL 数据库)]
I --> J[返回统一格式 JSON]
style A fill:#e1f5fe
style J fill:#e8f5e9
style I fill:#fff3e0
将数据库连接放入 Actix 的 App Data(应用状态)中,通过提取器注入到 Handler:
1 | use actix_web::{get, web, App, HttpServer, middleware}; |
访问 http://localhost:8080/app 即可从数据库获取 id=1 的数据并以统一格式返回:

四、小结
本文演示了从零搭建一个 Rust Web 服务的完整流程:
| 步骤 | 内容 |
|---|---|
| Hello World | Actix-web 基础路由 + JSON 响应 |
| 统一响应 | Option\<T\> 包裹泛型,支持成功/失败两种格式 |
| 数据库集成 | Sea-ORM 自动生成实体 + Actix App Data 状态注入 |
这只是入门引导。实际项目中还需要补充:
- CRUD 完整操作(Create / Read / Update / Delete)
- 中间件配置(认证、CORS、限流)
- 错误处理统一(自定义 Error Response)
- 配置管理(
.env文件读取数据库连接串等)
Sea-ORM 的完整 CRUD 用法可以参考其官方文档。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 优秀的螺丝工!
评论