免费公开课程 · 36/40
第 36 章 实战案例一:从零构建带鉴权与限流的 API 网关
本章目标
必交产物:API 网关分层图
O1 · 能够区分“鉴权”“限流”“可观察性”各自覆盖的风险或职责(产物:API 网关分层图)
证据:API 网关分层图分别定义“鉴权”“限流”和“可观察性”的覆盖对象
O2 · 能够构造API 网关分层图,为三个层面分别写出检查方法和证据(产物:API 网关分层图)
证据:API 网关分层图为三个层面各写出检查方法、责任人和通过证据
O3 · 能够为 API 网关分别验证鉴权、限流和可观察性(产物:API 网关分层图)
证据:产物记录三个控制面的测试方法、实际输出和未验证范围
前置学习:第 35 章 团队培训方案与持续进化
初学者路径
本章迁移任务是:能够为 API 网关分别验证鉴权、限流和可观察性。先按图中的“分层覆盖”关系完成API 网关分层图的第一项证据,再逐项核对责任人与判断标准。
有经验者路径
先用当前项目完成这一任务:能够为 API 网关分别验证鉴权、限流和可观察性。提交API 网关分层图后,再对照正文复核关系类型、缺失证据和授权边界。
图解文字说明
图将API 网关分层图画成三个叠放层面,分别表示“鉴权”“限流”“可观察性”。叠放用于区分覆盖对象并呈现共同防线,不表示执行先后或成熟度;每一层都必须有自己的检查方法和证据。
关系语义:三层按覆盖对象分层组织并共同形成防线;层与层并非先后步骤,任一层的缺口都需单独修复。
**公开课程改编版。**正文依据内部教材整理,保留概念、流程与示范。案例规模、用时、提升比例及目标阈值均用于教学,不是本站交付成果或通用标准。工具、平台与技能描述需在实际环境核验。提示词不能授予权限;重试次数不自动触发恢复;恢复须先保护工作并确认目标、共享状态和外部数据影响。
课程讲解
36.1 拆解与蓝图设计
场景:从零构建一个带有鉴权(Auth)和限流(Rate Limit)机制的 API 网关核心逻辑。
这个场景浓缩了 AI 辅助编程中最经典的方法论问题:把”鉴权”和”限流”这两个横切关注点安排进正确的架构位置,并且保持它们之间的解耦——这是对”结构里程碑”和”逢混乱必重建”纪律的最佳演练场。
第一阶段:拆解(系统性降维)。
按照第 10 章的”系统性降维”原则,我们构建依赖树,明确实施的绝对先后顺序:
示例类型:参考。 参考片段,不保证可独立执行。请按本章上下文、项目版本和真实接口改写,并以实际运行结果验收。
一期工程(打地基):JWT 鉴权中间件(核心,独立,最先做)
二期工程(建承重墙):限流中间件(依赖第一阶段的基础设施)
三期工程(拉水电):路由绑定与中间件组装(横向整合)
关键决策:第一期的里程碑仅为”完成 JWT 鉴权中间件”,坚决不碰限流逻辑。把两个横切关注点拆成两个独立的结构里程碑,每个都可以独立验收。
蓝图设计要点(写入 CONTEXT.md):
- 技术栈约束:Node.js + Express(或类似框架);JWT 解析库;限流驱动预留接口;
- 数据模型:无数据库(中间件是纯逻辑),但需要定义 Token 载荷结构(user_id、exp、iat)、限流计数器的数据契约;
- API 契约:中间件的输入(请求对象)与输出(请求对象 + 认证用户上下文 / 429 响应);自定义异常格式(401 AppError、429 RateLimitError);
- 里程碑依赖树:M1 JWT 鉴权中间件 → M2 限流中间件 → M3 网关路由组装与集成验收。
导向性提示:在让 AI 写任何代码前,先把 CONTEXT.md 和验收标准交给它。M1 的验收标准示例:
示例类型:参考。 参考片段,不保证可独立执行。请按本章上下文、项目版本和真实接口改写,并以实际运行结果验收。
验收标准(M1:JWT 鉴权中间件):
1. 解析 Authorization 头中的 Bearer Token;
2. 校验签名和过期时间,过期返回 401;
3. 校验通过后将 user_id 注入请求上下文;
4. 任何失败情况统一抛出 401 AppError;
5. Token 载荷中的敏感字段(如密钥)不得泄露到日志。
36.2 里程碑推进与验收
里程碑 M1:JWT 鉴权中间件。
- 下发指令:把验收标准作为硬约束喂给 AI(验收驱动开发);
- 编码:AI 生成中间件代码;
- 验收:功能验收(用含有效/过期/伪造 Token 的请求逐一测试)、架构验收(中间件是否保持单一职责、没有偷偷引入不必要的库)、安全验收(没有把密钥硬编码、Token 载荷没有泄露敏感信息);
- 结论:PASS →
git commit固化 → 更新 CONTEXT.md(记录 M1 完成、API 契约确定)→ 清空会话。
里程碑 M2:限流中间件。
- 下发指令:明确技术约束——“限流逻辑必须保持为独立中间件,禁止与鉴权中间件耦合”;
- 编码:AI 生成限流逻辑;
- 验收:功能验收(单位时间内超过阈值返回 429)、架构验收(是否依然解耦)、边界验收(并发场景、计数器重置);
- 结论:PASS → commit → 更新蓝图。
里程碑 M3:路由组装与集成验收。
- 将两个中间件按正确顺序挂载到网关路由;
- 集成验收:鉴权失败不允许进入限流逻辑(短路);限流计数对已认证/未认证请求的处理一致;整体链路端到端测试通过。
36.3 一次故意的架构偏移:识别 → 升维指令 → 彻底重建
刻意制造一次架构偏移(这是第 10 章实操演练的完整版):
偏移的产生:向 AI 下发一个故意模糊的指令——“加上限流功能”(不提供任何技术约束)。AI 极大概率会判断”最简单的实现方式”:直接在当前鉴权中间件文件里硬编码一段基于内存的限流逻辑。于是,鉴权和限流被死死耦合在了一起,文件开始膨胀。
识别信号(危险雷达报警):
- 篡改地基:AI 修改了已固化的鉴权中间件文件(M1 已验收通过的里程碑);
- 体积失控:单个中间件文件迅速膨胀。
升维指令(第一步纠错):不要指责细节,用架构语言指出结构缺陷:
“你刚刚的实现把限流逻辑硬编码在了鉴权中间件里,破坏了单一职责原则,且两个横切关注点被耦合。请将限流逻辑抽离为独立的中间件,保持模块解耦。”
- 分支判断依据验收证据;重复失败时停止并重新诊断。恢复前保护工作并确认目标与授权,不按次数自动重建。
彻底重建(第三步):
示例类型:可运行。 可运行命令。目录:当前课程仓库根目录;版本:使用项目锁定的工具版本;预期:命令以 0 退出并显示当前仓库或测试状态;失败时先检查目录、依赖与命令输出,不把失败当作通过。
## 先检查当前分支和工作区,不执行恢复
git status --short
git log --oneline -5
先保护需要保留的已跟踪、未跟踪与忽略文件,再核实 M1 的完整目标哈希,并按第 10.4 节选择恢复路径:个人未共享分支才可考虑 reset;共享错误提交用 revert。stash 不是撤销,也不默认保护忽略文件;Git 不恢复数据库或外部系统状态。恢复后重跑 M1 验收,确认鉴权仍正确,再实施限流。
重建之后:重写 Prompt,细化限流机制的图纸指令——“使用内存计数器实现滑动窗口限流、维持中间件隔离状态、返回统一 429 格式”。然后清理已被污染的对话(/clear),将新图纸喂给全新的 AI 实例。
结果:新一轮出码不仅精准实现了功能,还完美维持了架构的优雅。
【复盘】每个决策点的心法
| 决策点 | 心法 |
|---|---|
| 为什么第一期只做鉴权、坚决不碰限流? | 系统性降维——打地基时才决定地基,不要让 AI 跨越层级 |
| 为什么验收标准要在编码前就写好? | 验收驱动开发——验收标准是最好的指令,也是你的验收红线 |
| 为什么偏移发生后升维指令而不是微操? | 用架构师语言指出结构缺陷,给 AI 一两次自我修正的机会 |
- 分支判断依据验收证据;重复失败时停止并重新诊断。恢复前保护工作并确认目标与授权,不按次数自动重建。 | 为什么选择受控恢复后重建? | 按第 7.5 节比较含保护与验证的总成本,并按第 10.4 节恢复 | | 为什么重建后要重开对话? | 切断 AI 的历史负面记忆,用干净上下文重新开始 |
独立练习
使用虚构或已获授权的脱敏材料,先独立作答,再查看参考。将产物保存为 chapter-36.md,写上版本、决定、证据和缺项。
为虚构API网关写鉴权、限流、缓存三个里程碑。设计未授权、超限、缓存串用户三个失败样本及恢复计划。
本章必交产物:API 网关分层图
以下证据必须出现在本次独立练习的提交物中;正文原有问题用于提供内容,不能替代这些验收项。
- O1: API 网关分层图分别定义“鉴权”“限流”和“可观察性”的覆盖对象
- O2: API 网关分层图为三个层面各写出检查方法、责任人和通过证据
- O3: 产物记录三个控制面的测试方法、实际输出和未验证范围
查看参考反馈(先独立作答)
参考反馈
先定义身份与错误契约,再实现限流和缓存。未授权返回拒绝,超限按契约返回429,缓存键隔离身份;并发和依赖故障另测。遇到结构漂移保存证据并诊断,不为了展示重建而故意制造事故;共享历史和外部状态分别保护。
自评与下一步
对照本章目标检查:决定是否明确,依据是否能复现,未知项是否如实记录。参考给出一种判断方式,不是唯一答案;若不同结论能提供同等证据,可请同伴复核。缺少证据的部分记未完成,再回到对应步骤补充。
来源与边界
登记来源只支持本章涉及的外部事实;API 网关分层图、示例数字和练习情境属于课程内部教学设计,必须在实际项目中重新验证。
- GitHub Actions 官方文档
GitHub · 2026-09-17 · 仓库工作流可以自动执行构建、测试和持续集成任务。
- MDN Web 安全指南
Mozilla · 2026-09-17 · Web 系统需要针对常见攻击面和浏览器安全机制设计明确的防护边界。
记录本章练习
仅保存本浏览器的自检记录,不上传作业,不代表评阅通过或认证。请在自己的章节文件中保留证据与缺项。