PATH 02/LESSON 10/18 分钟
API 是稳定契约
让客户端和服务端通过明确输入、输出与错误协作。
课程全目录 · 选择章节
本课学习目标
- • 输入 — 验证请求结构
- • 权限 — 确认调用身份
- • 逻辑 — 执行领域规则
- • 响应 — 返回稳定结构
完成路径
阅读概念与案例 → 完成动手任务 → 勾选实践检查 → 回答检查点 → 保存完成记录。练习由你自行检查,不会假装成自动代码评分。
01 / 核心概念
API 不只是一个 URL,而是调用双方共同依赖的契约。请求结构、响应结构、错误语义和权限边界都属于契约。
在边界处验证数据,比让错误进入业务逻辑后再猜测原因更便宜。
02 / 心智模型
输入
验证请求结构
权限
确认调用身份
逻辑
执行领域规则
响应
返回稳定结构
03 / 代码骨架
TYPESCRIPT / CONCEPT
const input = CreateTaskSchema.parse(await request.json());
const user = await requireUser(request);
const task = await createTask(user.id, input);
return Response.json({ data: task }, { status: 201 });这是解释结构的代码骨架,外部函数与数据需要在实际项目中实现。
04 / 贯穿案例
放进真实情境里看
浏览器提交创建任务请求。前端只校验了标题非空,但有人直接调用 API 发送超长标题和别人的 ownerId。服务端如果照单全收,权限与数据都会失控。
- 01
只接受允许的输入
请求体只包含标题和说明;用户 ID 来自服务器验证后的会话,不从客户端字段读取。
- 02
给错误稳定的形状
例如 400 表示输入错误,401 表示未登录,403 表示无权访问;响应中的 code 和 message 供界面映射。
- 03
覆盖边界测试
测试空标题、超长标题、未登录、访问他人任务与重复请求。不要只测试一次成功创建。
05 / 动手做
用自己的产物检验理解
写一份 POST /tasks 契约:合法请求、成功响应、三个错误响应及各自的状态码。注明 ownerId 如何确定。
完成时检查
- 客户端不能指定任务所有者
- 输入长度有明确限制
- 401 与 403 的含义不同
自动保存在当前浏览器,不会同步到账户。
06 / 检查点