从 PHP 到 AI + Golang,程序员自救转型手记(三十):实现管理员注销接口、API 请求函数命名规范
这是一个系列 Blog作者将以一个 PHP 全栈工程师的身份利用 AI 工具claude code、codex、deepseek、豆包等从零开始学习 golang 语言并最终完成 ai-go-admingithub | gitee开源项目的制作全程记录分享。在上一期我们进行了 “token 过期清理、获取实例的方法名称规范统一”本期将完成实现管理员注销接口、API 请求函数命名规范实现管理员注销接口在迁移后台布局时我们已经准备好了管理员注销按钮和注销接口请求函数/** * 管理员注销请求 */exportfunctionadminLogout(){returnrequest({url:/admin/logout,method:POST,})}这里我们直接要求 CC实现服务端/admin/logout接口中途 AI 提供了几个选项问我从哪里获取 token提供了比如logoutHandler 内单独从header解析出token认证中间件解析到token后额外注入token字段到请求上下文之前只是认证未记录 token…但我认为我们之前已经注入了一个admin用于存储管理员信息token本来就是属于管理员信息的一部分直接将token合并到admin中即可聚合在一个对象里比两个独立context key更合理。所以认证中间件内将token解析出来后合并放到admin模型中最终注入到上下文中然后注销时获取即可不需要单独注入token。后续又考虑到model.Admin是GORM实体模型映射admins表。token是请求级别的临时数据不属于admin实体把它们绑在一起不合适额外定义一个AdminSession struct作为extractAdmin的新返回值类型。最终代码如下internal\middleware\admin_auth.go// AdminSession 管理员会话信息由认证中间件注入到请求上下文typeAdminSessionstruct{Admin*model.Admin Tokenstring}// GetToken 从上下文中取出当前令牌字符串未登录时返回空funcGetToken(c*gin.Context)string{session,ok:c.Get(CtxAdminKey)if!ok{return}returnsession.(*AdminSession).Token}// 其他略......internal\handler\admin\admin.go// Logout 管理员退出登录func(h*AdminHandler)Logout(c*gin.Context){iferr:h.svc.Logout(c,middleware.GetToken(c));err!nil{response.Fail(c)return}response.Success(c)}// 路由注册此路由要求登录group.POST(/logout,middleware.AdminAuth(),h.Logout)internal\service\admin\admin.go对应服务层调用 token 驱动删除 token 数据// Logout 注销当前管理员令牌func(s*AdminService)Logout(c*gin.Context,tokenStrstring)error{returntoken.Manager().Delete(c.Request.Context(),tokenStr)}意外 bug后续对注销接口进行测试时从数据库内直接删除掉 token 再发起注销结果提示身份认证令牌失效请重新登录这里逻辑不对找到注销方法加了以下几行代码admin:middleware.GetAdmin(c)ifadminnil{// 未登录直接生成成功响应其意图已自然完成// 不能执行任何 token 删除逻辑因为管理员未认证response.Success(c)return}API 请求函数命名规范目前项目虽然没几个API请求函数web/src/api/内的函数但是命名方式比较随意adminLogin、adminLogoutgetCaptchaConfig、checkClickCaptchapostClearCache这里让 AI 帮我们统一一个命名规范豆包建议get和check开头的保持adminLogin这种没有前缀的加上一个do前缀post开头的也改为do前缀。也听取了CC内的GLM-5.2的建议差异在于adminLogin这种没有前缀也保持现状因为我们项目只使用GET和POST两种请求方式非GET自然就是POST兼容 cdn 等云服务大多数 CDN/全站加速 服务对 PUT、DELETE 等兼容性差post开头的则去掉前缀最终我决定让 AI 帮我去掉postClearCache的post前缀adminLogin改为loginadminLogout改为logout都在admin.ts文件以内其实是无需前缀的getCaptchaConfig改为getLoginConfig后续都以类似的方式进行命名get请求函数加前缀普通的post无需前缀。