LESSON 5.5 / BACKEND & API

完成第一次前后端联调

联调是把用户输入、网络请求、后端处理和界面反馈连成闭环,并处理等待、失败和重复提交。

预计阅读15–20 分钟
完成结果能够沿完整数据流定位联调问题。
本课目标
  • 能够沿完整数据流定位联调问题。
  • fetch、序列化、跨域与环境地址
  • 让一个表单调用自己的 API,并实现禁用重复提交、错误提示和重试。
开始之前
  • 完成 5.4「输入校验、错误处理与接口契约」
01

FOUNDATION

必须理解

联调是把用户输入、网络请求、后端处理和界面反馈连成闭环,并处理等待、失败和重复提交。

前后端联调是让界面从本地假数据转向真实接口。核心不是写一行 fetch,而是处理加载、成功、空数据、校验失败和网络失败的完整状态。

先建立整体直觉

柜台提交申请后,会出现排队、受理成功、材料不足、系统故障等状态。界面要把当前阶段告诉用户,而不是按钮按下后沉默。

贯穿本课的实际场景

任务页面加载时请求 GET /api/tasks,提交表单时 POST 新任务;按钮在提交中禁用,失败保留输入并显示服务端 message,成功再更新列表。

概念 1

fetch、序列化、跨域与环境地址

先用白话理解

一个请求不只有成功和失败,它还会经历等待、加载,也可能得到空结果。页面如果不把这些状态说清楚,用户很容易重复点击或以为卡住了。

基础概念

fetch 是浏览器发送 HTTP 请求的接口,序列化把内存数据转换成可传输文本,CORS(Cross-Origin Resource Sharing,跨源资源共享)是浏览器对跨源读取的安全控制。

进一步理解

对象经 JSON.stringify 进入请求体,服务端解析后处理,再把 JSON 响应交回前端。内容类型与字段契约必须两端一致。

源由协议、主机和端口共同决定。浏览器跨源调用时,服务端需明确允许来源与方法;同一 Next.js 应用里的相对 API 路径通常同源。

放进实际场景

任务表单把 `{title}` 序列化后 POST 到 `/api/tasks`,服务端返回新任务,前端解析并加入列表。

容易混淆的地方

CORS 不是后端权限系统,也不是所有“接口不通”的原因。服务端到服务端请求通常不受浏览器 CORS 限制。

这一小节记住:联调首先要保证地址、协议、格式与字段契约在两端一致。

概念 2

加载、成功、空结果、失败和重试状态

先用白话理解

浏览器和服务器靠约定好的 JSON 连接,字段名、是否可选、日期长什么样都要一致。跨域时还会遇到 CORS,不过同一个 Next.js 应用里的接口通常简单很多。

基础概念

一次界面请求至少会经历空闲、加载、成功、空结果和失败,失败后还可能重试。每种状态都应给用户可理解且不会造成重复操作的反馈。

进一步理解

加载时保留上下文并防止重复提交;成功展示新数据;空结果解释确实没有内容;校验失败保留输入;网络失败允许安全重试。

重试只适合可重复且不会产生额外副作用的操作,或服务端具备幂等保障。创建请求盲目重试可能生成重复记录。

放进实际场景

提交任务后按钮显示“正在保存”并禁用;400 时保留标题并显示字段提示;断网时允许用户重试;成功才清空输入。

容易混淆的地方

空数组是一次成功响应,不是错误;加载中也不是空状态。把它们都显示为空白会让用户误解系统卡住。

这一小节记住:把请求生命周期显式呈现,用户才知道现在发生了什么和能做什么。

概念 3

请求日志与浏览器 Network 的对应关系

先用白话理解

乐观更新会先改页面再等服务器,感觉很快,但失败时必须撤回;保守更新等成功后再显示,慢一点却更容易理解。第一版先选你能解释清楚的方案。

基础概念

浏览器 Network 记录客户端实际发出的请求和收到的响应,服务端日志记录请求进入应用后的处理。通过时间、路径和请求 ID 可以把两侧证据对应起来。

进一步理解

Network 可核对 URL、方法、头部、请求体、状态码和响应正文;服务端日志可说明路由是否命中、校验与数据库在哪一步失败。

若 Network 中没有请求,先查前端事件;请求 pending 查网络或服务处理;有 4xx 查契约与身份;有 5xx 再用请求 ID 查服务端异常。

放进实际场景

用户点击后 Network 出现 POST 400,响应指出 title 缺失;服务端日志记录同一 requestId 的校验失败,因此无需怀疑数据库。

容易混淆的地方

console 日志与 Network 不是同一证据。前端打印“准备发送”不证明请求真实离开浏览器。

这一小节记住:用两端证据把“接口不通”缩小成明确失败步骤。

02

AI COLLABORATION

AI 如何参与

让 AI 同时给出前端请求、后端日志和接口契约三份证据,再判断问题属于哪一端。

推荐协作顺序

  1. 1

    先把已经验证过的接口契约交给 AI。

  2. 2

    让它列出页面在等待、成功和失败时分别显示什么。

  3. 3

    接入后用 Network 的真实请求对照契约,不让 AI 根据代码猜运行结果。

可直接使用的 Prompt
请为 Next.js 任务表单设计前后端联调流程。接口为 POST /api/tasks,返回 201 Task 或 400 字段错误。请先列出 idle、submitting、success、validation error、network error 五种 UI,再给最小客户端代码。失败时保留输入,提交中防止重复点击。
应该得到什么

用户在每个阶段都能理解发生了什么,代码根据 status 和错误结构处理,不把所有失败都显示为“出错了”。

人工检查清单

  • 确认请求地址、方法和 JSON 字段与契约一致,Network 中实际响应被检查。
  • 让 AI 同时引用真实 Network 详情、接口契约和对应服务端日志,不能只猜某一端。
  • 按加载、成功、空结果、校验失败、断网和重复点击逐一操作,确认界面状态可观察。
03

COMMON TRAPS

常见误区

错误不是需要隐藏的失败,而是帮助你看清系统边界的证据。下面三类问题在 AI 辅助学习中最常出现。

误区 1

按钮按下后毫无反馈

你会看到
请求正在发送,但用户以为没点到而连续提交。
为什么发生
“接口不通”没有地址、状态码和响应,可能覆盖事件未触发、CORS、404、500 等完全不同问题。
怎样纠正
提交期间显示状态并暂时禁用按钮。
误区 2

失败后把输入清空

你会看到
网络中断或校验失败,用户刚写的任务标题丢了。
为什么发生
请求期间仍允许重复点击会产生并发和重复记录,尤其在网络慢时用户更容易再次操作。
怎样纠正
只有成功创建后才清空输入,失败时保留内容和明确提示。
误区 3

前端接口各自猜字段

你会看到
列表读取 done,表单更新却写 completed。
为什么发生
成功后立即乐观显示却没有失败回滚,会让页面与服务器真相分离。
怎样纠正
所有调用围绕同一契约和共享类型,变更时一起更新。
04

HANDS-ON

动手任务

让一个表单调用自己的 API,并实现禁用重复提交、错误提示和重试。

准备条件
  • 完成 5.4「输入校验、错误处理与接口契约」

跟着做

  1. 01

    单独验证 GET 与 POST 接口。

  2. 02

    页面首次加载 GET,并显示加载与空状态。

  3. 03

    表单提交 POST,设置 submitting 并禁用按钮。

  4. 04

    成功后更新列表并清空输入。

  5. 05

    分别断网和提交空标题,显示不同且可恢复的错误。

完成标志

能够沿完整数据流定位联调问题。

加餐挑战

模拟服务器延迟两秒,检查加载反馈和重复提交保护是否仍有效。

离开本课前,自问四件事

  • fetch、JSON 序列化与 CORS 分别处在请求链路哪一部分?
  • 加载、空结果和失败为什么必须是三个不同界面状态?
  • 创建请求重试时需要考虑什么风险?
  • 如何用 Network 与服务端日志定位一次联调失败?
完成本课了吗?

确认完成后,会同步更新学习中心的课程学习进度。