实际开发 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 进行.
业务需求
- 实现官网的支付方式提供接口
- 实现官网的支付方式自由配置
- 实现订阅支持:
- 对接 Paddle 的订阅 Webhook
- 用户管理, 登录和注册, 使用 email
- 用户产品管理, 一个用户可能有多个产品, 每个产品对应有记录
- 订阅状态管理
- 产品侧 API: 是否是订阅
- 实现买断支持:
- 通过 Paddle 后台产品 Webhook 进行
待续.