返回全栈开发
PATH 02/LESSON 10/18 分钟

API 是稳定契约

让客户端和服务端通过明确输入、输出与错误协作。

课程全目录 · 选择章节

本课学习目标

  • • 输入 — 验证请求结构
  • • 权限 — 确认调用身份
  • • 逻辑 — 执行领域规则
  • • 响应 — 返回稳定结构

完成路径

阅读概念与案例 → 完成动手任务 → 勾选实践检查 → 回答检查点 → 保存完成记录。练习由你自行检查,不会假装成自动代码评分。

01 / 核心概念

API 不只是一个 URL,而是调用双方共同依赖的契约。请求结构、响应结构、错误语义和权限边界都属于契约。

在边界处验证数据,比让错误进入业务逻辑后再猜测原因更便宜。

02 / 心智模型

01

输入

验证请求结构

02

权限

确认调用身份

03

逻辑

执行领域规则

04

响应

返回稳定结构

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。服务端如果照单全收,权限与数据都会失控。

  1. 01

    只接受允许的输入

    请求体只包含标题和说明;用户 ID 来自服务器验证后的会话,不从客户端字段读取。

  2. 02

    给错误稳定的形状

    例如 400 表示输入错误,401 表示未登录,403 表示无权访问;响应中的 code 和 message 供界面映射。

  3. 03

    覆盖边界测试

    测试空标题、超长标题、未登录、访问他人任务与重复请求。不要只测试一次成功创建。

05 / 动手做

用自己的产物检验理解

写一份 POST /tasks 契约:合法请求、成功响应、三个错误响应及各自的状态码。注明 ownerId 如何确定。

完成时检查

  • 客户端不能指定任务所有者
  • 输入长度有明确限制
  • 401 与 403 的含义不同

自动保存在当前浏览器,不会同步到账户。

继续到代码练习

06 / 检查点

无效输入应该在哪里最先被拒绝?

延伸阅读 · 原始资料