Gohub开发
本项目为从零构建一个高性能、功能齐全的 API 程序框架,主体内容和第一个项目相似。但是并没有做前端的内容,只针对相应功能做了 API 开发。
本项目主要设计一下三部分的知识点:
- API 开发
- 命令行开发
- 构建高效率的程序结构
主要功能为:
- 用户的注册和登录
- 安全验证码和图片验证码
- JWT 授权
- 用户修改个人信息
项目统计
实现路由
请求方法 | API 地址 | 说明 |
---|---|---|
POST | /api/v1/auth/login/using-phone | 短信 + 手机号登录 |
POST | /api/v1/auth/login/using-password | 手机号、用户名、邮箱 + 密码 |
POST | /api/v1/auth/login/refresh-token | 刷下 Token |
POST | /api/v1/auth/password-reset/using-email | 邮件密码重置 |
POST | /api/v1/auth/password-reset/using-phone | 短信验证码密码重置 |
POST | /api/v1/auth/signup/using-phone | 使用手机号注册 |
POST | /api/v1/auth/signup/using-email | 使用邮箱注册 |
POST | /api/v1/auth/signup/phone/exist | 手机号是否已注册 |
POST | /api/v1/auth/signup/email/exist | email 是否已支持 |
POST | /api/v1/auth/verify-codes/phone | 发送短信验证码 |
POST | /api/v1/auth/verify-codes/email | 发送邮件验证码 |
POST | /api/v1/auth/verify-codes/captcha | 获取图片验证码 |
GET | /api/v1/user | 获取当前用户 |
GET | /api/v1/users | 用户列表 |
PUT | /api/v1/users | 修改个人资料 |
PUT | /api/v1/users/email | 修改邮箱 |
PUT | /api/v1/users/phone | 修改手机号 |
PUT | /api/v1/users/password | 修改密码 |
PUT | /api/v1/users/avatar | 上传头像 |
GET | /api/v1/categories | 分类列表 |
POST | /api/v1/categories | 创建分类 |
PUT | /api/v1/categories/:id | 更新分类 |
DELETE | /api/v1/categories/:id | 删除分类 |
GET | /api/v1/topics | 话题列表 |
POST | /api/v1/topics | 创建话题 |
PUT | /api/v1/topics/:id | 更新话题 |
DELETE | /api/v1/topics/:id | 删除话题 |
GET | /api/v1/topics/:id | 获取话题 |
GET | /api/v1/links | 友情链接列表 |
第三方依赖
使用到的开源库:
- gin —— 路由、路由组、中间件
- zap —— 高性能日志方案
- gorm —— ORM 数据操作
- cobra —— 命令行结构
- viper —— 配置信息
- cast —— 类型转换
- redis —— Redis 操作
- jwt —— JWT 操作
- base64Captcha —— 图片验证码
- govalidator —— 请求验证器
- limiter —— 限流器
- email —— SMTP 邮件发送
- aliyun-communicate —— 发送阿里云短信
- ansi —— 终端高亮输出
- strcase —— 字符串大小写操作
- pluralize —— 英文字符单数复数处理
- faker —— 假数据填充
- imaging —— 图片裁切
自定义的包
现在来看下我们自建的库:
- app —— 应用对象
- auth —— 用户授权
- cache —— 缓存
- captcha —— 图片验证码
- config —— 配置信息
- console —— 终端
- database —— 数据库操作
- file —— 文件处理
- hash —— 哈希
- helpers —— 辅助方法
- jwt —— JWT 认证
- limiter —— API 限流
- logger —— 日志记录
- mail —— 邮件发送
- migrate —— 数据库迁移
- paginator —— 分页器
- redis —— Redis 数据库操作
- response —— 响应处理
- seed —— 数据填充
- sms —— 发送短信
- str —— 字符串处理
- verifycode —— 数字验证码
知识点
- 配置信息(使用 Viper,支持 .env 和 config 目录 )
- API 版本
- API 错误码
- API 限流
- 支持秒、分钟、小时、天级的请求限制
- 支持返回 API 请求量标头(限制数,剩余量、重置时间)
- 注册登录
- 注册
- 判断手机是否注册
- 判断 Email 是否注册
- 支持手机 + 短信验证码进行注册
- 支持使用邮箱注册账号
- 登录
- 支持手机 + 短信进行登录
- 支持密码登录(手机号、Email、用户名任选)
- 支持更加安全的 Token Refresh 机制
- 找回密码
- 支持使用手机 + 短信验证码找回
- 支持使用邮箱 + 邮箱验证码找回
- 注册
- JWT 授权
- 整个应用使用命令行模式(默认运行 web 服务)
- 内置命令行( cobra,对比 cli 和 cobra)
- key 命令生成 app key
- make 命令
- make seeder —— 生成数据填充
- make policy —— 生成授权文件
- make apicontroller —— 生成 Restful API 控制器
- make model —— 生成模型文件
- make request —— 生成请求验证文件
- make factory —— 生成模型工厂文件
- make cmd —— 生成自定义命令文件
- make migration —— 生成数据库迁移文件
- seed 数据填充
- seed 所有数据
- seed 单条数据
- 支持使用 faker 填充假数据
- 支持模型工厂( factory )
- migrate 数据库迁移
- up —— 执行迁移
- rollback (down) —— 回滚上一步执行的迁移
- fresh —— 删除所有表,然后执行所有迁移
- reset —— 回滚所有迁移
- refresh —— 回滚所有迁移,然后再执行所有迁移
- cache 缓存处理
- cache clear —— 清除缓存
- cache forget —— 忘记某个 KEY 对应的缓存
- 分页
- 支持返回上下页链接,方便客户端调用
- Cache 缓存包
- 支持 redis 缓存
- 使用 interface ,支持使用多驱动
- Redis 操作
- 安全验证码
- Email (发送邮箱,使用 Mailhog 进行测试)
- 手机验证码(发送手机短信)
- 内置 Redis 驱动,以接口方式编写,支持多驱动
- 图片验证码,防机器人滥用
- 支持通过配置信息自定义复杂度
- 内置 Redis 驱动,以接口方式编写,支持多驱动
- 日志记录
- 集成 zap 高性能日志库
- 支持命令行记录(方便开发时快速定位问题)
- 命令行日志高亮
- 支持文件记录(多文件和按日期分隔)
- 记录 gorm 的 query log
- 记录 HTTP 请求 log
- Panic Recovery 中间件
- 合理的日志等级(debug, info, error, panic, fatal)
- Policy 授权策略结构
- Request 请求验证方案
- 支持 JSON 请求、表单请求、URL Query
- API 图片上传
- 图片裁切
- 数据库支持 mysql 和 sqlite
总结
由于本项目是一个完全只涉及到 API 设计的内容,所以测试功能是否符合预期则是采用了 Postman 这款测试软件,有关 Redis 的可视化则是采用了 Another Redis Desktop Manager。
考虑到篇幅的问题,项目的知识点总结会分开来写。所以这篇文章是用来提醒我去学习的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 随便寻个地方'Blog!