Skip to main content

实际开发 1

数据库和数据库驱动及周边工具选择

  • 数据库除考虑性能外, 还有 SQLDriver 的选择(包括稳定/维护/bug等): https://github.com/golang/go/wiki/SQLDrivers, 目前 MySQL 的比较成熟, PostgresSQL 的 pq 只是在维护了, pgx 还在稳定过程中.

  • 比较稳妥的是先选择 MySQL, 后续可根据情况考虑 Postgres, 因为目前的用户规模和数据库用途都比较满足. 这个 MySQL 驱动 实现的是标准的 database/sql 接口.

  • 通过 SQLC 可以正常支持 MySQL 的代码生成. SQLC 同样支持多种迁移工具的对应的 sql(即 Schema 的改变).

  • 迁移工具的选择 Golang-Migrate, 关于 golang-migrate 的 MySQL 支持, 详见官方文档.

Web 框架

综合看还是选择 GIN 即可.

  • 数据验证的实现: validator
  • DTO 和 Model/Entity 的转换
  • 整体架构
  • 依赖注入: 手动进行, 依赖抽象而非具体实现

不同层的单元测试

  • DAL: 数据库集成测试(本地)
  • Core: Mock 单元测试
  • API: Mock 单元测试

认证和授权

PASETO + 手动验证 + API Group 区分登录和未登录用户访问 + 每个 API 独立授权规则手动实现

语言选择

Golang 没得跑.

部署

使用 docker 进行.

业务需求

  1. 实现官网的支付方式提供接口
  2. 实现官网的支付方式自由配置
  3. 实现订阅支持:
    • 对接 Paddle 的订阅 Webhook
    • 用户管理, 登录和注册, 使用 email
    • 用户产品管理, 一个用户可能有多个产品, 每个产品对应有记录
    • 订阅状态管理
    • 产品侧 API: 是否是订阅
  4. 实现买断支持:
    • 通过 Paddle 后台产品 Webhook 进行

待续.