$npx -y skills add youlaitech/youlai-skills --skill rustRust 后端开发规范. Use this skill when developing Rust web projects, implementing REST APIs with Axum + SeaORM, JWT/Redis token authentication, or the youlai-rust admin backend (PostgreSQL).
| 1 | # Rust 后端开发规范(Axum + SeaORM) |
| 2 | |
| 3 | > 本 Skill 配合设计文档 `docs/youlai-rust-2026.md` 使用。AI 助手依据这两份文档可从 0 到 1 创建与 youlai-boot-postgres 功能等价的 Rust 后端。 |
| 4 | |
| 5 | ## 触发条件 |
| 6 | |
| 7 | - 开发 Rust Web 项目 |
| 8 | - 使用 Axum 框架实现 REST API |
| 9 | - 使用 SeaORM 异步 ORM |
| 10 | - 使用 serde / validator 做数据验证 |
| 11 | - 实现 JWT / Redis Token 认证 |
| 12 | - 实现基于角色的权限控制(RBAC) |
| 13 | - 开发 youlai-rust 管理后台模块 |
| 14 | - 依据 `docs/youlai-rust-2026.md` 创建 youlai-rust 项目 |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## Part 1: 技术栈 |
| 19 | |
| 20 | | 层 | 选型 | 说明 | |
| 21 | |---|------|------| |
| 22 | | 异步运行时 | **tokio** 1.x | Rust 异步事实标准 | |
| 23 | | Web 框架 | **axum** 0.8+ | Tokio 官方,Tower 中间件生态 | |
| 24 | | ORM | **sea-orm** 1.1+ | ActiveRecord + 查询构建器,对标 MyBatis-Plus | |
| 25 | | 迁移工具 | **sea-orm-migration** 1.1+ | SeaORM 内置 | |
| 26 | | 数据验证 | **validator** 0.18+ | `#[validate]` 派生,对标 Bean Validation | |
| 27 | | 数据库 | **PostgreSQL** 16+ | 复用 `youlai-boot-postgres/sql/youlai_admin.sql` | |
| 28 | | 数据库驱动 | **sqlx-postgres** 0.8+ | SeaORM 底层,异步原生 | |
| 29 | | 缓存 | **Redis** 7.x | `redis` crate 异步客户端 | |
| 30 | | 本地缓存 | **moka** 0.12+ | 高性能并发缓存 | |
| 31 | | 序列化 | **serde + serde_json** 1.x | Rust 序列化事实标准 | |
| 32 | | 配置管理 | **figment** 0.10+ | 多源合并(TOML + ENV) | |
| 33 | | 日志 | **tracing + tracing-subscriber** 0.1+ | 结构化日志、span 链路追踪 | |
| 34 | | API 文档 | **utoipa + utoipa-swagger-ui** 5.x / 8.x | 宏派生 OpenAPI | |
| 35 | | 认证 | **jsonwebtoken** 9.x + **bcrypt** 0.16+ | JWT 签发/验签、密码哈希 | |
| 36 | | 限流 | **tower-governor** 0.4+ | Tower 兼容 | |
| 37 | | Excel | **calamine**(读) + **rust_xlsxwriter**(写) | 纯 Rust | |
| 38 | | 对象存储 | **aws-sdk-s3** 1.x | MinIO/S3 兼容 | |
| 39 | | 邮件 | **lettre** 0.11+ | 异步 SMTP | |
| 40 | | 任务调度 | **tokio-cron-scheduler** 0.13+ | 进程内 cron | |
| 41 | | 包管理 | **cargo** | Rust 官方 | |
| 42 | | 代码质量 | **clippy + rustfmt** | 官方 linter + 格式化 | |
| 43 | | 测试 | **#[test] + reqwest + testcontainers** | testcontainers 起真实依赖 | |
| 44 | |
| 45 | > **不含多租户**:youlai-rust 不实现多租户,数据库为 PostgreSQL。 |
| 46 | |
| 47 | --- |
| 48 | |
| 49 | ## Part 2: 目录结构 |
| 50 | |
| 51 | ``` |
| 52 | youlai-rust/ |
| 53 | ├── src/ |
| 54 | │ ├── main.rs # 程序入口:装配路由/中间件/状态/优雅关停 |
| 55 | │ ├── lib.rs # 库入口(供集成测试) |
| 56 | │ ├── core/ # 核心基础设施 |
| 57 | │ │ ├── config.rs # figment 读取 config.toml + .env,强类型 Settings |
| 58 | │ │ ├── database.rs # SeaORM DatabaseConnection + 连接池 |
| 59 | │ │ ├── redis.rs # async Redis 连接池 |
| 60 | │ │ └── state.rs # AppState(db / redis / token_manager) |
| 61 | │ ├── common/ # 公共常量/枚举/工具 |
| 62 | │ │ ├── constants.rs # SecurityConstants / RedisConstants |
| 63 | │ │ ├── enums.rs # ResultCode 枚举 |
| 64 | │ │ └── pagination.rs # PageQuery / PageData |
| 65 | │ ├── entity/ # SeaORM Entity(sea-orm-cli 生成) |
| 66 | │ │ ├── mod.rs |
| 67 | │ │ ├── sys_user.rs |
| 68 | │ │ ├── sys_role.rs |
| 69 | │ │ └── ... |
| 70 | │ ├── framework/ # 框架层(不依赖 modules/) |
| 71 | │ │ ├── web/ # 统一响应与异常处理 |
| 72 | │ │ │ ├── response.rs # Result<T> + PageResult<T> + PageData<T> |
| 73 | │ │ │ ├── error.rs # AppError + AppResult<T> |
| 74 | │ │ │ └── exception.rs # 全局异常处理 |
| 75 | │ │ ├── security/ # 安全模块 |
| 76 | │ │ │ ├── token.rs # TokenManager trait + JwtTokenManager + RedisTokenManager |
| 77 | │ │ │ ├── extractor.rs # current_user 提取器 |
| 78 | │ │ │ ├── layer.rs # Token 认证 tower Layer |
| 79 | │ │ │ ├── permission.rs # require_perm 权限 guard |
| 80 | │ │ │ └── model.rs # SecurityUserDetails / AuthenticationToken |
| 81 | │ │ ├── captcha/ # 图形验证码 |
| 82 | │ │ │ └── service.rs # captcha crate + Redis 存储 |
| 83 | │ │ ├── cache/ # 缓存 |
| 84 | │ │ │ └── redis_cache.rs # Redis 缓存工具 |
| 85 | │ │ ├── sse/ # SSE 实时推送 |
| 86 | │ │ │ └── manager.rs # SseManager + connect / broadcast |
| 87 | │ │ ├── middleware/ # 中间件 |
| 88 | │ │ │ ├── cors.rs |
| 89 | │ │ │ ├── log.rs # 操作日志中间件 |
| 90 | │ │ │ └── rate_limit.rs # 限流(tower-governor) |
| 91 | │ │ ├── integration/ # 第三方集成 |
| 92 | │ │ │ ├── mail/ # 邮件(lettre + tera) |
| 93 | │ │ │ ├── sms/ # 短信 |
| 94 | │ │ │ └── wxma/ # 微信小程序 |
| 95 | │ │ ├── apidoc.rs # utoipa OpenAPI + Swagger UI |
| 96 | │ │ └── job/ # 定时任务 |
| 97 | │ └── modules/ # 业务模块 |
| 98 | │ ├── auth/ # 认证(router + service + dto) |
| 99 | │ ├── system/ # 系统管理 |
| 100 | │ │ ├── user/ # 用户 |
| 101 | │ │ ├── role/ # 角色 |
| 102 | │ │ ├── menu/ # 菜单 |
| 103 | │ │ ├── dept/ # 部门 |
| 104 | │ │ ├── dict/ # 字典 |
| 105 | │ │ ├── config/ # 配置 |
| 106 | │ │ ├── notice/ # 通知 |
| 107 | │ │ └── log/ # 日志 |
| 108 | │ ├── message/ # 消息/SSE |
| 109 | │ ├── file/ # 文件 |
| 110 | │ └── codegen/ # 代码生成 |
| 111 | ├── migration/ # sea-orm-migration 迁移 |
| 112 | ├── templates/ # tera |