主题
18 · 生产栈迷你项目串烧
目标:把 Gin + Viper + Zap + Validator + JWT + GORM 收成可运行、可测试的笔记 API。
前置:12~17;对照 10 · 标准库迷你 API(本篇是「生产向升级版」)
1. 范围
做
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health | 探活 |
| POST | /auth/register | email + password → 用户 |
| POST | /auth/login | 返回 JWT |
| GET | /api/v1/me | JWT → 当前用户 |
| GET | /api/v1/notes | 当前用户笔记列表 |
| POST | /api/v1/notes | 创建 |
| GET | /api/v1/notes/:id | 详情(校验归属) |
| PATCH | /api/v1/notes/:id | 更新 |
| DELETE | /api/v1/notes/:id | 删除 |
不做(本版)
Redis、MQ、ES、Docker(19~22 再加)、Swagger UI、刷新令牌轮转。
2. 建议目录
text
notesapi/
go.mod
cmd/server/main.go
internal/config/
internal/logx/
internal/model/
internal/auth/
internal/handler/
internal/middleware/
internal/service/
config.yaml
config.example.yaml
README.md1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
依赖注入:main 组装 cfg → logger → db → handler → router。
3. 里程碑(约 1 周)
| Day | 交付 |
|---|---|
| 1 | Viper + Zap + Gin /health |
| 2 | GORM User/Note + AutoMigrate |
| 3 | Register / Login + JWT |
| 4 | Notes CRUD + 归属校验 |
| 5 | Validator 全覆盖;统一错误 JSON |
| 6 | go test:至少 auth.Parse + 一个 handler httptest |
| 7 | README:如何配置 DSN、如何 curl 走通 |
4. 验收打勾
- [ ]
go test ./...通过 - [ ] 换环境变量可改端口与 JWT secret
- [ ] 无 token 访问
/api/v1/notes→ 401 - [ ] 用户 A 不能读写用户 B 的笔记 → 404 或 403(选一种并文档说明)
- [ ] 日志含 requestId + path + status
- [ ] 能向别人讲清:配置、日志、校验、鉴权、ORM 各在哪一层
5. 项目驱动(对标手帐)
| 手帐能力 | 本项目对应 |
|---|---|
| 登录态 | JWT |
| 我的手帐列表 | notes by user_id |
| 防越权 | 详情/改/删校验归属 |
| 以后缓存热门 | 预留 service 接口,21 篇加 Redis |
6. 常见坑 + AI 审查
| 坑 | 说明 |
|---|---|
| 分层形式主义 | service 空转一层没问题;禁止 AI 生成过度 DDD |
| 测试连真库不稳定 | 可用 sqlite 测逻辑,或 testcontainers(可后补) |
| 把 Journal monorepo 整仓搬进 Go | 独立 module,小而完整 |
7. 下一篇
生产栈达标后进入缓存:
→ 19 · Redis 数据结构与原理
