本项目为从零构建一个高性能、功能齐全的 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 友情链接列表

第三方依赖

使用到的开源库:

自定义的包

现在来看下我们自建的库:

  • 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 —— 数字验证码

知识点

  1. 配置信息(使用 Viper,支持 .env 和 config 目录 )
  2. API 版本
  3. API 错误码
  4. API 限流
    1. 支持秒、分钟、小时、天级的请求限制
    2. 支持返回 API 请求量标头(限制数,剩余量、重置时间)
  5. 注册登录
    1. 注册
      1. 判断手机是否注册
      2. 判断 Email 是否注册
      3. 支持手机 + 短信验证码进行注册
      4. 支持使用邮箱注册账号
    2. 登录
      1. 支持手机 + 短信进行登录
      2. 支持密码登录(手机号、Email、用户名任选)
      3. 支持更加安全的 Token Refresh 机制
    3. 找回密码
      1. 支持使用手机 + 短信验证码找回
      2. 支持使用邮箱 + 邮箱验证码找回
  6. JWT 授权
  7. 整个应用使用命令行模式(默认运行 web 服务)
  8. 内置命令行( cobra,对比 cli 和 cobra)
    1. key 命令生成 app key
    2. make 命令
      • make seeder —— 生成数据填充
      • make policy —— 生成授权文件
      • make apicontroller —— 生成 Restful API 控制器
      • make model —— 生成模型文件
      • make request —— 生成请求验证文件
      • make factory —— 生成模型工厂文件
      • make cmd —— 生成自定义命令文件
      • make migration —— 生成数据库迁移文件
    3. seed 数据填充
      • seed 所有数据
      • seed 单条数据
      • 支持使用 faker 填充假数据
      • 支持模型工厂( factory )
    4. migrate 数据库迁移
      1. up —— 执行迁移
      2. rollback (down) —— 回滚上一步执行的迁移
      3. fresh —— 删除所有表,然后执行所有迁移
      4. reset —— 回滚所有迁移
      5. refresh —— 回滚所有迁移,然后再执行所有迁移
    5. cache 缓存处理
      • cache clear —— 清除缓存
      • cache forget —— 忘记某个 KEY 对应的缓存
  9. 分页
    1. 支持返回上下页链接,方便客户端调用
  10. Cache 缓存包
    1. 支持 redis 缓存
    2. 使用 interface ,支持使用多驱动
  11. Redis 操作
  12. 安全验证码
    1. Email (发送邮箱,使用 Mailhog 进行测试)
    2. 手机验证码(发送手机短信)
    3. 内置 Redis 驱动,以接口方式编写,支持多驱动
  13. 图片验证码,防机器人滥用
    1. 支持通过配置信息自定义复杂度
    2. 内置 Redis 驱动,以接口方式编写,支持多驱动
  14. 日志记录
    1. 集成 zap 高性能日志库
    2. 支持命令行记录(方便开发时快速定位问题)
    3. 命令行日志高亮
    4. 支持文件记录(多文件和按日期分隔)
    5. 记录 gorm 的 query log
    6. 记录 HTTP 请求 log
    7. Panic Recovery 中间件
    8. 合理的日志等级(debug, info, error, panic, fatal)
  15. Policy 授权策略结构
  16. Request 请求验证方案
    1. 支持 JSON 请求、表单请求、URL Query
  17. API 图片上传
  18. 图片裁切
  19. 数据库支持 mysql 和 sqlite

总结

由于本项目是一个完全只涉及到 API 设计的内容,所以测试功能是否符合预期则是采用了 Postman 这款测试软件,有关 Redis 的可视化则是采用了 Another Redis Desktop Manager。

考虑到篇幅的问题,项目的知识点总结会分开来写。所以这篇文章是用来提醒我去学习的。