第 10 章 · 场景案例一:修复接口 500 报错
本章目标:完整跟练 线上/本地接口 500 从发现到修复——Ask 定位 → SRX 修 → 审阅 → 验收 → Git commit;会用 报错原文 + @ 文件 + 负面约束;失败时用 Timeline / Git / 终端跟进 补救。
学时建议:3~4 小时(含 2 小时在真实或练习项目实操)
前置:srx-v7 ch01~ch09(尤其绝学 1~19);gin-web / django-web 等项目更佳。
下文以「订单列表 GET /api/orders/ 500」为例,步骤通用于 Go / Python / Node 后端。
10.1 场景背景
| 项目 | 内容 |
|---|---|
| 现象 | 访问 GET /api/orders/ 返回 500 |
| 日志 | AttributeError: 'NoneType' object has no attribute 'items'(示例) |
| 怀疑 | handlers/order.go 或 apps/order/views.py 第 47 行附近 |
| 约束 | 不改数据库 schema、不新增依赖 |
| 您的角色 | 后端开发,用小紫 SRX 修 bug 并走审阅 |
为什么选 500 作第一案例:最常见、日志信息足、适合练 Ask 不改盘 + SRX 小范围改(ch09 场景 A)。
10.2 学完你能
| 能力 | 验收 |
|---|---|
| 复现 | 本地/测试环境确认 500 |
| Ask | 只分析不改盘,得到文件清单 |
| SRX | 四要素 + @ + 约束发修复任务 |
| 控场 | 改偏文件时 Ctrl+Enter 打断 |
| 审阅 | 三看一拒,只接受 order 相关 |
| 验收 | curl/测试通过 + commit |
10.3 开工准备(约 15 分钟)
步骤 1 — 打开项目
- 项目 → 打开项目 → 仓库根目录(绝学 2)
步骤 2 — 行为偏好(推荐)
- Ctrl+, → SRX-V7引擎 设置 → 打开行为偏好
- 示例:「改 handler 同步改 test;不要改 migrations」
步骤 3 — Git 分支
git status # 期望 clean 或先 commit
git checkout -b fix/order-list-500
步骤 4 — 复现并收集证据
- 启动 API(按你项目:
go run、python manage.py runserver等) - 请求接口,确认 500
- 复制 3~5 行关键报错(含文件、行号、异常类型)
你应该看到:浏览器/ curl 状态码 500;终端或日志有 stack trace。
10.4 第一轮:Ask 定位(不改盘)
设置:AI 下拉 → Ask(ch02)
输入(复制改):
订单列表接口 GET /api/orders/ 返回 500。
报错信息如下:
(粘贴您的完整报错,含文件路径与行号)
请分析可能原因,并列出应重点查看的文件与函数。
不要改任何代码,只分析。
你应该看到:
- 文字分析(None 从哪来、可能缺判空等)
- 无审阅条、磁盘无变化
您要做:
- 对照左侧文件树,路径是否与 Ask 一致
- 不一致则在下一轮 @ 钉正确文件
- 可选:Ask 追问「最小改动方案是什么?」
10.5 第二轮:SRX 修复(带审阅)
设置:工作模式 + AI 下拉 → SRX-V7引擎;新任务(绝学 7 可单独一张卡)
输入(复制改路径):
【目标】修复 GET /api/orders/ 返回 500
【范围】仅改 @handlers/order.go(若 Ask 指出还需 serializers/views,再加 @)
【现象】AttributeError: 'NoneType' object has no attribute 'items',约第 47 行
【约束】不修改 migrations、settings、.env;不新增第三方依赖
【验收】接口返回 200 或合理 4xx,不再 500;相关单测通过(若有)
执行中注意:
| 情况 | 操作 |
|---|---|
改 settings 或无关目录 | Ctrl+Enter:「停,范围仅限 order 模块」 |
| 出现 实施计划 | 扫步骤 → 不对 稍后 重写(ch04) |
| 影响面清单 | 记下 tests、serializers(ch05) |
| 结构化修复清单 | 等结束再审逻辑(ch06) |