Chapter 02 · Backend

后端设计

Go 模块化单体,满足前端全部功能即可、不做过度设计。API 契约完整继承 design/server/ARCHITECTURE.md §3 蓝本,唯一语义修订:数据面从 WireGuard 换为 sing-box(REALITY / Hysteria2),connect 改为下发用户凭证 + 节点连接参数。

§1服务形态与模块划分

单体起步、按模块分包(实现顺序即蓝本 §7):

HTTP APIchi · /v1
auth验证码/注册/JWT
codes激活码/兑换/webhook
devices设备/订阅校验
nodes目录/connect/调度
usage用量/额度
admin管理端(独立监听)
gRPC server(mTLS)节点 agent:注册 / 心跳 / 凭证下发与回收 / 用量上报
scheduler探针汇聚 · 判封 · 节点生命周期驱动(见 04 章)
MySQL主数据
Redis验证码/限流/实时负载
一个二进制三个监听:公网 API(CDN 后)· agent gRPC(mTLS 双向认证)· 管理端(内网/白名单)

§2API 契约 v1(继承蓝本 §3,正式版用 OpenAPI 定义)

# 认证(无需 JWT)
POST /v1/auth/code        {email}                  # 发 6 位验证码(Redis 10min,限 1/min)
POST /v1/auth/register    {email, code, password}  # 建号 + 7 天试用 + JWT
POST /v1/auth/login       {email, password}        # JWT(access 15min + refresh 30d)
POST /v1/auth/refresh     {refresh_token}

# 账户
GET    /v1/me                                      # 账户 + 订阅 + 用量摘要
GET    /v1/me/devices
DELETE /v1/me/devices/:id                          # 移除设备(同步回收节点侧凭证)

# 商业闭环(App 内无支付,只有兑换)
POST /v1/redeem           {code}                   # 兑换激活码(幂等 + 审计)
POST /v1/ads/unlock       {device_id, ad_token}    # 免费版激励视频解锁当日时长(验 SDK 回执)
GET  /v1/plans                                     # 套餐目录(数字与 design/CLAUDE.md §7 一致)

# 节点(数据面入口)
GET  /v1/nodes            ?if_version=N            # 节点目录(按套餐过滤,304 支持)
POST /v1/nodes/:id/connect    {device_id}          # 下发连接凭证(见 §3,语义已适配 sing-box)
POST /v1/nodes/:id/disconnect {device_id}

GET  /v1/usage            ?days=7                  # 用量曲线(统计页)
GET  /v1/notices                                   # 公告(亦发布为多镜像签名静态 JSON)

§3connect 语义适配(相对蓝本 v0.1 的唯一修订)

修订理由蓝本 v0.1 的数据面是 WireGuard(connect = 下发 WG peer)。WG 协议特征明显,在目标网络环境会被快速识别阻断;plan/ phase-0~3 已选定 REALITY 主线 + Hysteria2 备线。API 形状不变,仅返回体语义调整。

3.1 连接流程

客户端POST /nodes/:id/connect
API 校验订阅有效 · 设备数 ≤ 上限 · 免费版校验 ad_unlocked_at + 剩余分钟
gRPC → agent确保该用户 UUID 已在节点 sing-box 用户表
返回连接参数server, port, uuid, flow, reality pbk/sid/sni · hy2 备用
免费版凭证带 TTL = 当日剩余分钟,到时 agent 自动从用户表移除;付费版 TTL 24h 在线自动续期

3.2 凭证模型

§4关键业务流程

4.1 注册与试用(对齐客户端 UI:邮箱 → 验证码 → 设密码)

4.2 激活码生命周期

发卡店售出webhook(HMAC 签名)
人工渠道TG/LINE/邮箱 · 管理端批量生成 batch
codes 入库status=unused · 库存 hash
POST /redeem事务:redeemed + 订阅顺延(叠加非覆盖)
audit_log必记

4.3 免费版广告解锁

§5后端安全要点(详见 06 章总纲)