跳到课程正文
EN
课程书架/自学公开课程

第 05 周 / 24 · 做出有用的工具

从程序到页面

把程序变成可用页面:Web、HTTP 与 API 边界

10 小时核心 + 2 小时机动学习 · 实验 · 独立练习
开始阅读 ↓
从程序到页面24 周个人 FDE 实践路线

本周要回答: 一个按钮被点击之后,数据在哪里处理、经过了谁、失败时用户会看到什么?

进入本周前: 能理解数据结构和核心处理函数;对网络基础不熟悉时先补 MDN,不直接进入完整全栈课程。

图 05.1本周的思考路径
  1. 01用户事件
  2. 02本地状态
  3. 03模拟请求
  4. 04可见反馈
课程示意图 · 根据本周实验步骤绘制,表示建议流程,不是实测结果。

学习内容与理解目标

先建立浏览器、服务器、数据库和外部模型四个不同执行位置的概念。学习请求方法、状态码、JSON、超时和异步处理;理解界面状态至少包括空、加载、成功和错误。React 的组件、属性、状态与事件只学当前需要的部分,不同时追逐多种前端框架。

对于本地周计划工具,浏览器本身可能足够;新增后端应有明确原因。浏览器端环境变量和构建产物不能用来保密 API key。登录和权限不是“显示一个按钮”的问题;这一周先用 mock API 练数据流,不把真实账号接进来。

学习链接与选读范围

级别 官方或原始资料 本周只读这些 阅读预算
必读 R32 · MDN:Overview of HTTP 请求、响应、客户端与服务端的关系。 35 分钟
必读 R29 · React:Quick Start 组件、数据展示、事件、状态;完成一个最小表单。 50 分钟
补基础 R22 · Full Stack Open Part 0:Fundamentals of Web apps 浏览器与服务器如何交互;理解网络面板。 35 分钟

实战拆解

  1. 为工具建立一个只有必要字段的页面,保留原有纯函数与测试。先用合成数据,把用户最常用的一条流程走通。

  2. 在浏览器网络面板里观察一次请求,解释方法、路径、状态和响应体。为无后端项目说明“没有发出请求”,而不是凭感觉宣称本地。

  3. 模拟慢响应、无网络、服务端错误和格式错误。界面应提示用户现在能做什么;加载时防止误触发重复动作,但服务端仍需后续去重。

  4. 将用户输入和模型返回当作普通文本渲染;不得为了展示 Markdown 就直接信任任意 HTML。检查键盘可达性、表单标签和错误信息位置。

  5. 画一张文字版数据流:哪些字段留本地、哪些可能发往服务器、保存多久。没有用途的网络请求和第三方组件先不要加。

交付与验收

本周交付 怎样确认真的完成
可交互最小页面 正常、空、加载、错误四类状态可演示,键盘能完成核心流程。
数据流说明 本人能追踪一次输入,从页面到处理函数再到输出。
边界检查 页面和构建文件中没有秘密;不可信内容不被当可执行 HTML。

不用代码生成器的练习: 自己新增一个错误状态,或把一个长事件处理函数拆成可测试函数;先说明如何触发,再修改。

隐私与安全检查: 不要把“跨域限制”当身份验证,不把隐藏前端按钮当授权。若展示外部 Markdown,采用受控渲染并审查 HTML 处理;相关原则见 R63 · OWASP:Cross Site Scripting Prevention Cheat Sheet。开启网络功能前,先知道数据离开设备的那一步。

落到日常生活: 把工具入口放在实际会打开的位置,例如本地书签;不用“每天提醒自己记得用”来掩盖入口太深或操作太多。

过关或补课判断: 能解释网络面板中出现的请求,能演示错误路径,才进入交付阶段。还只会复制网页截图时,应先回到数据流和事件。

本周可复制的协作提示

请将现有纯逻辑接成一个最小页面,不另起大型架构。加入空、加载、成功和错误状态,使用合成输入与 mock API。解释每次网络请求的目的,并让我独立增加一种错误处理。

本周来源与核对范围

来源编号与核对说明沿用课程原文,基线为 2026-09-27。未逐一登录完成外部实验;实施前请核对最新版本与访问条件。

  1. R22
    Full Stack Open Part 0:Fundamentals of Web apps ↗

    核对分部入口;按页面当前小节选择,不承诺练习编号固定。

  2. R29
    React:Quick Start ↗

    组件、数据、事件与状态入门。

  3. R32
    MDN:Overview of HTTP ↗

    浏览器、服务器、请求与响应的基础。

  4. R63
    OWASP:Cross Site Scripting Prevention Cheat Sheet ↗

    输出编码、可信模板与不可信 HTML 处理。