外观
练习 — Middleware · Validation · CORS
对应知识点:
Middleware·Validation·CORS对应文档:docs/phase-03-web/middleware-validation-cors.md代码目录:workspace/phase-03/middleware/
前置条件:完成 net/http Handler 练习。
Level 1 — 基础
练习 1.1 · Logging 中间件
在 workspace/phase-03/middleware/ 创建项目:
要求:
- 函数
loggingMiddleware(next http.Handler) http.Handler - 记录:method、path、status、duration
- 包装
/health验证日志输出
练习 1.2 · 中间件链
要求:
- 实现
chain(h http.Handler, middlewares ...func(http.Handler) http.Handler) http.Handler - 链顺序:logging → recovery(panic recover)→ 实际 handler
- recovery 返回 500 JSON 错误
练习 1.3 · CORS 基础
要求:
corsMiddleware设置:Access-Control-Allow-Origin: http://localhost:5173(Vue dev)Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONSAccess-Control-Allow-Headers: Content-Type, Authorization
- OPTIONS 预检请求返回 204
Level 2 — 应用
练习 2.1 · 请求体校验
要求:
- 定义
CreateDeviceRequest:id(必填)、name(必填)、deviceType(agv/sensor) - 函数
ValidateCreateDevice(req CreateDeviceRequest) error - 校验失败返回 400 + 字段级错误信息
练习 2.2 · Query 参数校验
要求:
GET /api/v1/devices?page=&pageSize=- page 默认 1,pageSize 默认 20,最大 100
- 非法数字返回 400
练习 2.3 · 从 Vue 前端验证 CORS
要求:
- 用简单 HTML 或 Vue 项目从
localhost:5173请求 Go API - 无 CORS 中间件时应报跨域错误
- 加上中间件后请求成功
- 在 README 记录浏览器 Network 面板观察要点
Level 3 — 综合
练习 3.1 · 认证中间件骨架
要求:
authMiddleware(next http.Handler) http.Handler- 读取
Authorization: Bearer <token>header - token 为空返回 401;mock 合法 token 为
"dev-token" - 将 userId 写入 request context(
context.WithValue)
练习 3.2 · 组合到 Project 01
要求:
- 在 Phase 03 net/http 项目上叠加:logging、recovery、cors
/api/v1/devicesPOST 加校验/api/v1/admin/*路由加 authMiddleware(mock)
Level 4 — 项目实践
练习 4.1 · 数字孪生 API 中间件栈
在 workspace/phase-03/middleware/ 完成:
要求:
- 完整中间件栈:RequestID → Logging → Recovery → CORS → Auth(可选)
- RequestID 写入响应 header
X-Request-ID - 所有 4xx/5xx 日志包含 requestId
- 提供
middleware/包,main 中一行链式挂载 - Vue + Three.js 前端可从 dev server 调用 devices API
- README:中间件顺序说明及原因
学习检查
- [ ] 中间件的执行顺序如何影响行为?
- [ ] CORS 预检请求何时触发?
- [ ] 校验应放在 Handler 还是 Service 层?
- [ ] context 传 userId 的注意事项?
提交方式
检查答案 — middleware validation cors 练习 X.X学习导航
上一篇:net/http、Handler、Router · 对应知识文档 · 下一篇:Gin、JWT、API Design