- auth.go:Login/Register 改 JSON 绑定(loginRequest/registerRequest),
错误码复用 i18n 键:登录失败 login_error(401)、限流锁定 login_locked(429)、
注册校验 400、用户名冲突 user_username_exists(409)、注册禁用
registration_disabled(403);成功返回 {ok,redirect}(角色定向 /admin 或 /)
- main.go:旧 POST /login /register /logout 移除,迁入 /api/auth 分组
- i18n:新增 registration_disabled(中英)
- security_test.go:env 路由改 /api/auth/*,e.login 改 JSON 登录,
新增 postJSON/respCode/respRedirect/respOK 测试辅助
- p2_validation_test.go:TestLoginRateLimited/TestLoginTimingDoesNotRevealUser/
TestRegisterRejectsInvalidEmail 迁移 JSON 断言(429/401/409/400)
- base.html:logout-form 全局委托 fetch + login/register 模板 id/JS
- main_test.go:冒烟断言补 /api/auth 三端点
- go build/vet/test ./... 全绿
3.0 KiB
3.0 KiB
API 化改造 Todo
操作接口改为 /api/ 前缀的 JSON API(POST/PUT/DELETE、码+文案错误响应),页面路由保持不变。
基建(high)
- 1. 新建
handlers/api.go:APIError(c, status, trKey)、APIOK(c, redirect, data)、JSON 绑定/解析 helper - 2.
middleware/auth.go:AuthRequired/AdminRequired按/api路径前缀分支 401/403 JSON(非 API 保持 302) - 3.
main.go:注册/api分组(auth/article/admin/profile/my 子组)+ gin 静态/参数路由冲突冒烟测试(新增TestRegisterRoutesSmoke,含附件端点搬移,LoginRateLimiter导出) - 4.
templates/layouts/base.html:增加blogAPI/blogForm/blogShowError共享 fetch 助手(CSRF 头、e.submitter状态按钮、bool 复选框转换)
零行为搬移(medium)
- 5. 附件三件套(admin/my)+
/api/profile/avatar换注册路径(路由已在基建 commit 搬移) - 6. 搬移端点模板更新:
article_create.html3 处 fetch URL、profile.html1 处(删除改用 DELETE)
功能改造(medium)
- 7. 认证 API:
auth.goLogin/Register/Logout JSON 化(429 限流、会话轮换保留) - 8. 认证模板:
login.html/register.html改 fetch + 错误 divid;base.html logout 改 fetch - 9. 评论 API:
comment.goPostComment JSON 化(校验码复用 i18n 键) - 10. 评论 API:
admin_comment.goapprove/reject/delete JSON 化 - 11. 评论模板:
article.html评论表单 fetch、comment_list.html操作后 reload - 12. 文章 CRUD API:
article.go/my_articles.go去 renderForm/Redirect 改 JSON(表单字段加 json tag) - 13. 文章模板:
article_create.html/my_article_form.html/article_list.html/my_articles.html改 fetch(easyMDE.value()、e.submitter) - 14. 用户 API:
admin_user.goUserCreate/Update/Delete JSON 化(自防/最后管理员拦截改 403) - 15. 用户模板:
user_form.html/user_list.html改 fetch - 16. 设置 API:
settings.go5 组 save JSON 化;site favicon 拆出POST /api/admin/settings/site/favicon - 17. 设置模板:
settings_site/settings_navlinks/settings_upload/settings_download/settings_comment5 页改 fetch - 18. 个人资料 API:
profile.goUpdateProfile JSON 化(头像走/api/profile/avatar) - 19. 个人资料模板:
profile.html文本表单改 fetch
测试与收尾(high)
- 20. 新增
handlers/api_test.go:happy path / 校验码 / 401 / 403 / CSRF 头 / 429 / 409 - 21. 更新
security_test.go/p2_validation_test.go/p3_upload_test.go/session_upload_security_test.go到新 URL 与 JSON 断言 - 22.
go build ./... && go vet ./... && go test ./...全绿;README 路由表同步
执行说明
- 每步只改路由/响应层,不动解析校验逻辑(JSON binding 替换 PostForm 读取),单步可编译可测
- 并发状态:单一编辑者(本会话从第 1 项开始逐步执行)