本文详细介绍如何使用 Axum 框架在 Rust 中构建一个通用化的 Web 应用模板,包括:
- 构建 RESTful API
- 使用 Sqlx 和 Postgres 数据库实现数据库交互
- 采用类似 Nest.js 的项目组织结构,以提升代码可维护性
- 包含丰富的单元测试和集成测试
- 使用 Github Actions 实现 CI/CD 流程
基础开发环境搭建
为了快速开始,可以参考我的 Rust 项目模板,点击这里获取项目代码。该模板包含基础项目结构和一些配置,帮助你迅速搭建开发环境。
类似 Nest.js 的项目组织方式
为了提升项目的可维护性和扩展性,本文中采用了类似 Nest.js 的项目组织结构:
├── docs # 文档文件
├── fixtures # 必要文件,比如公私钥,测试 SQL 脚本
├── migrations # 数据库迁移文件,适用于 Sqlx
├── rest_client # VS Code REST Client 测试 API 文件
├── src # 源代码
│ ├── common # 公共模块,如加解密、错误处理、配置等
│ └── modules # 业务模块
│ ├── auth # 认证模块,包括: `handlers`, `services`, `dto`, `tests`, `middleware` 等
│ └── users # 用户管理模块,包括: `handlers`, `services`, `dto`, `tests`, `entity` 等
业务模块文件说明
mod.rs
:模块的导入导出,创建当前模块的路由器。handlers.rs
:处理用户请求的逻辑。services.rs
:处理业务逻辑以及与数据库的交互。entity.rs
:定义与数据库表对应的结构体,便于结构操作。dto.rs
:定义数据转换对象,用于请求和响应的序列化和反序列化。tests.rs
:包含单元测试和集成测试。middleware.rs
:定义模块的中间件,用于认证、权限控制等。src/lib.rs
:定义项目的路由器,加载配置文件、初始化全局状态、错误处理等。src/main.rs
:应用入口。
开发经验分享
在项目开发过程中,我积累了一些经验,分享如下,帮助大家更好地构建 Axum Web 应用: