- 后端serde添加alias以接受camelCase、snake_case和原始数据库字段名 - 前端移除调试日志 - 修复afterbody.js中引用calculatedwindspeed→calculatedWindSpeed
9.2 KiB
9.2 KiB
Rust 后端 - 改进计划
一、代码质量与架构改进
1.1 代码组织问题
-
所有路由处理器都在 main.rs 中
- 现状:
main.rs包含所有路由处理器,文件过大(800+ 行) - 改进:按功能模块拆分到独立文件
handlers/auth.rs- 登录相关handlers/weather.rs- 天气数据相关handlers/user.rs- 用户相关handlers/admin.rs- 管理员相关
- 影响:提高代码可维护性
- 现状:
-
config.rs 是死代码
- 现状:AGENTS.md 中提到 config.rs 未被使用
- 改进:要么启用配置管理,要么删除该文件
- 影响:减少代码混淆
1.2 数据库操作优化
-
重复查询问题
- 位置:
insert_weather_data中多次查询用户信息 - 改进:合并查询或使用缓存
- 影响:减少数据库负载
- 位置:
-
缺少数据库索引
- 现状:未见索引定义
- 改进:添加常用查询字段索引
CREATE INDEX idx_weather_data_user_id ON weather_data(user_id); CREATE INDEX idx_weather_data_date ON weather_data(date); CREATE INDEX idx_users_openid ON users(openid);
1.3 错误处理改进
-
错误响应格式不统一
- 现状:部分返回
ErrorResponse,部分返回 JSON 字符串 - 改进:统一使用
ErrorResponse结构体 - 彰响:前端解析更一致
- 现状:部分返回
-
错误信息暴露过多
- 现状:部分错误直接返回数据库错误信息
- 改进:区分用户友好错误和开发者错误
- 影响:安全性提升
二、安全性改进
2.1 认证安全
-
缺少请求频率限制
- 风险:API 可能被滥用或遭受暴力攻击
- 改进:添加 Rate Limiting 中间件
- 实现:使用
actix-limitation或自定义中间件 - 配置:
- 登录接口:5 次/分钟
- 数据上传:30 次/分钟
- 查询接口:100 次/分钟
-
缺少 CSRF 防护
- 风险:跨站请求伪造攻击
- 改进:添加 CSRF Token 验证
- 实现:对于状态变更操作验证 Token
-
JWT Secret 管理
- 现状:明文存储在环境变量
- 改进:使用密钥管理服务(如 AWS Secrets Manager)
- 影响:提高密钥安全性
2.2 数据安全
-
数据库连接字符串明文存储
- 位置:
.env文件 - 改进:使用连接字符串加密或密钥管理
- 影响:防止凭证泄露
- 位置:
-
缺少敏感数据加密
- 现状:用户信息明文存储
- 改进:对敏感字段加密存储
- 字段:手机号、姓名等
-
缺少审计日志
- 需求:记录关键操作日志
- 实现:添加审计日志表和中间件
- 记录:登录、数据修改、管理员操作
2.3 输入验证
- 后端输入验证不完整
- 现状:部分依赖前端验证
- 改进:添加完整的请求验证
- 实现:使用
validatorcrate
三、性能优化
3.1 数据库性能
-
缺少连接池监控
- 现状:连接池配置固定
- 改进:添加连接池监控和动态调整
- 指标:连接数、等待时间、超时次数
-
缺少查询缓存
- 场景:用户信息、配置数据
- 改进:添加 Redis 缓存层
- 策略:用户信息缓存 5 分钟,配置数据缓存 1 小时
-
无读写分离支持
- 需求:高并发场景下的性能优化
- 改进:支持主从数据库配置
- 实现:使用 sqlx 的多数据源支持
3.2 API 性能
-
无响应压缩
- 现状:响应未压缩
- 改进:添加 gzip 压缩中间件
- 实现:使用
actix-web的压缩功能
-
缺少 API 缓存
- 场景:天气数据列表查询
- 改进:添加 HTTP 缓存头
- 实现:
Cache-Control、ETag等
-
无 CDN 支持
- 场景:静态资源分发
- 改进:配置 CDN 加速
- 资源:CSS、JS、图片、字体
四、功能完整性改进
4.1 API 功能扩展
-
缺少批量操作接口
- 需求:批量删除、批量查询
- 实现:添加批量操作端点
- 接口:
POST /weather/batch-delete、POST /weather/batch-query
-
无数据导出格式支持
- 需求:支持 CSV、Excel 导出
- 实现:添加导出端点
- 接口:
GET /weather/export?format=csv
-
缺少搜索和过滤功能
- 需求:按日期、标题、地点搜索
- 实现:添加搜索参数
- 参数:
?keyword=xxx&startDate=xxx&endDate=xxx
4.2 用户功能
-
缺少用户活动统计
- 需求:用户使用情况分析
- 实现:添加统计接口
- 数据:登录次数、数据上传量、最后活跃时间
-
无用户偏好设置
- 需求:保存用户偏好(如默认区域类型)
- 实现:添加用户设置表
- 接口:
GET/PUT /api/user/preferences
五、开发体验改进
5.1 测试覆盖
-
仅有一个基础编译测试
- 现状:
tests/integration_test.rs只有assert_eq!(2 + 2, 4) - 改进:添加完整的测试套件
- 类型:
- 单元测试:工具函数、数据结构
- 集成测试:API 端点
- 数据库测试:CRUD 操作
- 现状:
-
缺少 API 测试
- 需求:验证 API 行为
- 实现:使用
actix-web的测试工具 - 覆盖:正常流程、异常情况、边界条件
5.2 文档完善
-
无 API 文档
- 需求:接口文档
- 实现:使用 OpenAPI/Swagger
- 工具:
utoipacrate
-
缺少部署文档
- 内容:环境要求、配置说明、部署步骤
- 形式:
DEPLOYMENT.md文件
-
无变更日志
- 内容:版本更新记录
- 形式:
CHANGELOG.md文件
5.3 开发工具
-
缺少代码质量工具
- 工具:
clippy、rustfmt - 配置:
.clippy.toml、rustfmt.toml - 集成:CI/CD 流程
- 工具:
-
无热重载开发
- 需求:开发时自动重载
- 实现:使用
cargo-watch - 命令:
cargo watch -x run
六、监控与运维
6.1 日志系统
-
日志格式不统一
- 现状:部分使用
log宏,部分使用println - 改进:统一使用结构化日志
- 实现:使用
tracingcrate
- 现状:部分使用
-
无日志聚合
- 需求:集中式日志管理
- 实现:配置日志收集器(如 ELK Stack)
- 格式:JSON 格式便于解析
-
缺少性能指标收集
- 需求:API 响应时间、错误率等
- 实现:添加 Prometheus 指标
- 工具:
actix-web-prom
6.2 告警机制
-
无异常告警
- 需求:系统异常时通知
- 实现:集成告警服务
- 渠道:邮件、钉钉、企业微信
-
缺少资源监控
- 需求:CPU、内存、磁盘监控
- 实现:使用系统监控工具
- 工具:Prometheus + Grafana
6.3 健康检查
- 缺少健康检查接口
- 需求:负载均衡器健康检查
- 实现:添加
/health端点 - 检查:数据库连接、服务状态
七、部署改进
7.1 部署流程
-
部署脚本功能简单
- 现状:仅支持基本的编译、上传、重启
- 改进:添加回滚、备份、验证功能
- 实现:增强
deploy.sh脚本
-
无蓝绿部署或滚动更新
- 需求:零停机部署
- 实现:使用 Docker + Kubernetes
- 或者:Nginx 负载均衡 + 多实例
7.2 容器化
- 缺少 Docker 支持
- 需求:容器化部署
- 实现:添加
Dockerfile和docker-compose.yml - 优势:环境一致性、易于扩展
7.3 CI/CD
- 无自动化流程
- 需求:自动测试、构建、部署
- 实现:配置 GitHub Actions 或 Gitea Actions
- 流程:代码提交 → 测试 → 构建 → 部署
八、技术债务
8.1 高优先级
-
拆分 main.rs 中的路由处理器
- 影响:代码可维护性
- 工作量:中等
-
添加请求频率限制
- 影响:安全性
- 工作量:小
-
统一错误响应格式
- 影响:前后端对接
- 工作量:小
-
添加数据库索引
- 影响:性能
- 工作量:小
8.2 中优先级
-
添加单元测试和集成测试
- 影响:代码质量
- 工作量:大
-
实现 API 文档(OpenAPI)
- 影响:开发体验
- 工作量:中等
-
添加结构化日志
- 影响:运维
- 工作量:中等
-
优化数据库查询
- 影响:性能
- 工作量:中等
8.3 低优先级
-
实现 Redis 缓存
- 影响:性能
- 工作量:大
-
容器化部署
- 影响:部署流程
- 工作量:中等
-
添加监控告警
- 影响:运维
- 工作量:大
-
实现 CI/CD
- 影响:开发效率
- 工作量:中等
九、检查清单
代码提交前检查
- 通过
cargo clippy检查 - 通过
cargo fmt格式化 - 单元测试通过
- 无硬编码的敏感信息
部署前检查
- 数据库迁移脚本准备
- 环境变量配置检查
- 备份当前版本
- 健康检查接口正常
安全检查
- 输入验证完整
- 错误信息不暴露敏感数据
- 认证和授权正确
- 日志不记录敏感信息
最后更新:2026-04-13 维护者:开发团队