04 第4周D19 项目开发第2天
D19 项目开发 · 第 2 天:功能完成
D19 项目开发 · 第 2 天:功能完成
项目期。今日目标:四模块功能各自完成,每人的模块能独立跑通核心路径。为明天契约自测打底。
今日目标(对应作业.md 检查点)
- A:转发真实上游(D14 验证过的练习端点),流式返回,deduct 调用正确、失败处理完整。
- B:verify/deduct/admin 全部可用;余额不足返回明确语义;流水完整。
- C:用户列表/充值/流水/模型定价四页齐全,全接真数据。
- D:compose 能拉起三服务;联调脚本雏形能跑(充值→调用→查余额)。
各模块开发要点
A 代理服务(今天最难)
- 转发真实上游:base/model 走配置(环境变量),别硬编码。
- 流式:
stream=true时边收边转发(用 httpx 流式),超时与断流要处理。 - deduct 时机:拿到上游 usage 后立即调;deduct 失败 = 计费失败,决定"照常返回+记欠费"还是"返回错误"——今天先做"记录失败并仍返回",在进度.md 里说明取舍。
- 401/403/429 从上游透传或转义要明确。
B 计费引擎
- verify 完整:key 无效→valid=false;余额不足→
valid=true, insufficient=true。 - deduct 幂等二次验证:重复 request_id 返回相同结果(不重复扣)。
- 事务:扣费+流水同 BEGIN/COMMIT;异常 ROLLBACK。
- admin 接口字段与契约一致,分页可选。
C 管理面板
- 四页齐全,全部调真数据;错误提示(401/余额不足)前端有反馈。
- 充值后刷新余额立即变化。
D 部署
- compose 把 proxy/billing/panel 串起来(服务名=域名,D7 学的)。
- 联调脚本:curl 充值→curl 调用→curl 查余额→断言数字对得上。
- 环境变量(上游 base/key、DB 密码)走
.env.example,真实 key 不进仓库。
站会(早上 5 分钟)
- 昨天跑通了什么 / 今天目标 / 卡点(重点:A 的转发与 deduct 时序问题早暴露)。
讲解节奏建议(站点指导,非授课)
| 时段 | 安排 |
|---|---|
| 09:00-09:20 | 站会 + 今日目标 |
| 09:20-12:00 | 开发(讲师重点盯 A 的转发、B 的幂等) |
| 13:30-16:30 | 继续开发 |
| 16:30-17:00 | 每人演示"核心路径跑通" + 明日契约自测准备 |
常见误区(第 2 天高频)
| 误区 | 正确理解 |
|---|---|
| 上游 base/key 硬编码 | 走环境变量/.env.example,真实 key 不进仓库 |
| 流式转发忘处理超时 | httpx 流式要设 timeout,断流要能感知 |
| deduct 失败就懵 | 明确取舍:记失败日志并返回,还是报错——写进度.md |
| 前端只接 mock 不换真 | 今天必须全换真数据 |
| 自己模块通了就完事 | 明天契约自测要与他人对字段,今天先自我检查 |