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

330 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 中多次查询用户信息
- 改进:合并查询或使用缓存
- 影响:减少数据库负载
- [ ] **缺少数据库索引**
- 现状:未见索引定义
- 改进:添加常用查询字段索引
```sql
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-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
- 工具:`utoipa` crate
- [ ] **缺少部署文档**
- 内容:环境要求、配置说明、部署步骤
- 形式:`DEPLOYMENT.md` 文件
- [ ] **无变更日志**
- 内容:版本更新记录
- 形式:`CHANGELOG.md` 文件
### 5.3 开发工具
- [ ] **缺少代码质量工具**
- 工具:`clippy`、`rustfmt`
- 配置:`.clippy.toml`、`rustfmt.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 支持**
- 需求:容器化部署
- 实现:添加 `Dockerfile` 和 `docker-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
**维护者**:开发团队