Files
CyberStrikeAI/docs/feature/rest-error-empty-results.md
T

31 lines
2.9 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.
# REST 删除错误与空列表修复
## F0:接入与门禁
- 分支:codex/rest-error-empty-results;起始提交 68df7c1,工作区干净。
- P10 反馈修复,用户已明确授权修改及必要验证。已有只读分析:工作区 reviews/P-022-rest-semantics/analysis.md。
- 涉及 handler 的 c2.go (1267 行)、webshell.go (1097 行)、vulnerability.go (632 行)、batch_task_manager.go (1486 行)。较大文件负责模块 HTTP 或队列业务;已有模块测试,缺少本次 HTTP 合同回归覆盖。
- Maintainability Gate:高风险文件采用 narrow_fix,只改错误分支及空切片初始化,不增加职责、不移动代码;无需先重构。
- Workflow Gate:上游接口及实现已核对,期望明确,无阻塞依赖;允许实施。验证使用临时 SQLite 和 httptest,不访问部署服务。
- 生命周期范围:完成修复、验证、文档及变更记录;不合并、不部署。
## F1:已确认需求
用户明确要求:C2 Profile 和 WebShell 删除不存在对象返回 404,不暴露底层 SQL 错误;漏洞和批量任务列表无匹配时返回 [];补充必要验证。单对象读取、其他模块错误处理、鉴权及部署不在本次范围。真实数据库失败仍为 500。
## F2:接口设计
保持原 JSON 字段名、成功删除响应和分页字段。C2 缺失映射为 {"error":"profile not found"},WebShell 保持 connection not found。两者真正数据库错误记录内部日志,对外为稳定通用文案。列表在产生集合的现有方法初始化非 nil 空切片,覆盖数据库和内存路径。兼容性:消费者将收到 [] 而非 null;该变更为用户明确要求。
## F3:实施计划
改动 c2.go 的 DeleteProfile、webshell.go 的 DeleteConnection、database/vulnerability.go 的列表初始化、batch_task_manager.go 的 ListQueuesForAccess 初始化。添加独立 HTTP 合同测试,临时数据库验证缺失、成功删除和重复删除、真实 SQL 失败、空库、筛选无匹配及有结果列表;批量列表含内存路径。运行针对性测试及 handler/database 包测试、git diff --check。更新 changelog 与验证记录。回退使用本分支修复提交的 revert。
## F4:实施结果
- C2 Profile 删除将 sql.ErrNoRows 映射为 404;真实错误写内部日志,对外通用 500 文案。
- WebShell 删除使用 errors.Is 识别缺失,对外数据库错误改为通用 500 文案,底层已有日志保留。
- 漏洞数据库列表、批量队列业务列表初始化为空切片,成功的无记录查询序列化为 [];后者同时覆盖数据库与内存路径。
- 独立 httptest 回归覆盖缺失、成功删除、重复删除、SQL 错误脱敏、两类空列表、非空结果和批量内存分支。
- 修复前回归按预期失败,明确捕获原行为;修复后 `go test ./internal/handler -run '^TestREST(Delete|VulnerabilityList|BatchList)Semantics$' -count=1` 通过。