Files
asd-backend/IMPROVEMENTS.md
Milky0217 ce34896525 fix: 修复calculatedwindspeed字段命名不匹配问题
- 后端serde添加alias以接受camelCase、snake_case和原始数据库字段名
- 前端移除调试日志
- 修复afterbody.js中引用calculatedwindspeed→calculatedWindSpeed
2026-04-14 10:55:56 +08:00

9.2 KiB
Raw Blame History

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 输入验证

  • 后端输入验证不完整
    • 现状:部分依赖前端验证
    • 改进:添加完整的请求验证
    • 实现:使用 validator crate

三、性能优化

3.1 数据库性能

  • 缺少连接池监控

    • 现状:连接池配置固定
    • 改进:添加连接池监控和动态调整
    • 指标:连接数、等待时间、超时次数
  • 缺少查询缓存

    • 场景:用户信息、配置数据
    • 改进:添加 Redis 缓存层
    • 策略:用户信息缓存 5 分钟,配置数据缓存 1 小时
  • 无读写分离支持

    • 需求:高并发场景下的性能优化
    • 改进:支持主从数据库配置
    • 实现:使用 sqlx 的多数据源支持

3.2 API 性能

  • 无响应压缩

    • 现状:响应未压缩
    • 改进:添加 gzip 压缩中间件
    • 实现:使用 actix-web 的压缩功能
  • 缺少 API 缓存

    • 场景:天气数据列表查询
    • 改进:添加 HTTP 缓存头
    • 实现:Cache-ControlETag
  • 无 CDN 支持

    • 场景:静态资源分发
    • 改进:配置 CDN 加速
    • 资源CSS、JS、图片、字体

四、功能完整性改进

4.1 API 功能扩展

  • 缺少批量操作接口

    • 需求:批量删除、批量查询
    • 实现:添加批量操作端点
    • 接口:POST /weather/batch-deletePOST /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
    • 工具:utoipa crate
  • 缺少部署文档

    • 内容:环境要求、配置说明、部署步骤
    • 形式:DEPLOYMENT.md 文件
  • 无变更日志

    • 内容:版本更新记录
    • 形式:CHANGELOG.md 文件

5.3 开发工具

  • 缺少代码质量工具

    • 工具:clippyrustfmt
    • 配置:.clippy.tomlrustfmt.toml
    • 集成CI/CD 流程
  • 无热重载开发

    • 需求:开发时自动重载
    • 实现:使用 cargo-watch
    • 命令:cargo watch -x run

六、监控与运维

6.1 日志系统

  • 日志格式不统一

    • 现状:部分使用 log 宏,部分使用 println
    • 改进:统一使用结构化日志
    • 实现:使用 tracing crate
  • 无日志聚合

    • 需求:集中式日志管理
    • 实现:配置日志收集器(如 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 支持
    • 需求:容器化部署
    • 实现:添加 Dockerfiledocker-compose.yml
    • 优势:环境一致性、易于扩展

7.3 CI/CD

  • 无自动化流程
    • 需求:自动测试、构建、部署
    • 实现:配置 GitHub Actions 或 Gitea Actions
    • 流程:代码提交 → 测试 → 构建 → 部署

八、技术债务

8.1 高优先级

  1. 拆分 main.rs 中的路由处理器

    • 影响:代码可维护性
    • 工作量:中等
  2. 添加请求频率限制

    • 影响:安全性
    • 工作量:小
  3. 统一错误响应格式

    • 影响:前后端对接
    • 工作量:小
  4. 添加数据库索引

    • 影响:性能
    • 工作量:小

8.2 中优先级

  1. 添加单元测试和集成测试

    • 影响:代码质量
    • 工作量:大
  2. 实现 API 文档OpenAPI

    • 影响:开发体验
    • 工作量:中等
  3. 添加结构化日志

    • 影响:运维
    • 工作量:中等
  4. 优化数据库查询

    • 影响:性能
    • 工作量:中等

8.3 低优先级

  1. 实现 Redis 缓存

    • 影响:性能
    • 工作量:大
  2. 容器化部署

    • 影响:部署流程
    • 工作量:中等
  3. 添加监控告警

    • 影响:运维
    • 工作量:大
  4. 实现 CI/CD

    • 影响:开发效率
    • 工作量:中等

九、检查清单

代码提交前检查

  • 通过 cargo clippy 检查
  • 通过 cargo fmt 格式化
  • 单元测试通过
  • 无硬编码的敏感信息

部署前检查

  • 数据库迁移脚本准备
  • 环境变量配置检查
  • 备份当前版本
  • 健康检查接口正常

安全检查

  • 输入验证完整
  • 错误信息不暴露敏感数据
  • 认证和授权正确
  • 日志不记录敏感信息

最后更新2026-04-13 维护者:开发团队