Files
ele-HeiXiu/test-server/README.md
YoungestSongMo 95019316b2 feat: 前后端联调 — 任务创建 + 账户信息 + 预估花费 (0.0.18)
- task: device_id 改为必填参数,API 层 Omit 封装 + getDeviceId() 自动注入
- pricing.ts: Python 后端 calculate_cost 完整移植,六种定价模式 + 6 个 Bug 修复
  (浮点冗余/维度匹配不一致/null 守卫/matrix 数据提取/unit_scale 等)
- ModelInputForm: 三层兜底预估消费展示 + React Hooks 顺序修复
- AccountInfo: VIP 等级列表匹配,套餐详情展示(说明/周期/席位/到期)
- 模型列表加密缓存 (safe-storage, stale-while-revalidate)
- VIP API 模块 (激活码/等级/订单/模拟支付)
- device_id 统一使用 UUID v4 持久化 (与 login/register 对齐)
2026-06-10 19:38:26 +08:00

5.8 KiB
Raw Permalink Blame History

HeiXiu 更新服务器 — 后端对接文档

本文档供后端程序员阅读和实现。


快速启动测试服务器

cd test-server
pip install fastapi uvicorn
python server.py --release-dir ../release --port 8000

启动后访问:

  • API 文档Swaggerhttp://localhost:8000/docs
  • 健康检查:http://localhost:8000/health

API 端点

所有请求为 GET,无鉴权。

1. GET /api/v1/update/check — 版本检查

客户端启动后调用,决定是否提示用户更新。

请求参数Query String

参数 类型 必填 示例 说明
platform string win32 win32 / darwin / linux
version string 0.0.3 客户端当前版本号(三段式 semver
edition string personal personal / enterprise,默认 personal

响应 — 有更新时:

{
  "code": 0,
  "data": {
    "hasUpdate": true,
    "latestVersion": "0.0.4",
    "downloadUrl": "https://heixiu.oss-cn-hangzhou.aliyuncs.com/releases/0.0.4/xxx-Setup.exe",
    "fileSize": 113581841,
    "sha512": "Base64...",
    "blockMapUrl": "https://heixiu.oss-cn-hangzhou.aliyuncs.com/releases/0.0.4/xxx-Setup.exe.blockmap",
    "blockMapSize": 120256,
    "changelog": "## 0.0.4\n\n- 日志记录\n- 增量更新",
    "releaseDate": "2026-06-04",
    "forceUpdate": false,
    "minimumVersion": "0.0.0"
  }
}

响应 — 无更新时:

{
  "code": 0,
  "data": {
    "hasUpdate": false
  }
}

字段说明:

字段 类型 必填 说明
downloadUrl string 安装包 HTTPS 直链
fileSize number 安装包字节数
sha512 string 安装包 SHA512 Base64
blockMapUrl string blockmap 文件 URL缺失时客户端全量下载
blockMapSize number blockmap 文件字节数(> 0 时客户端启用增量下载)
changelog string Markdown 格式更新日志
releaseDate string 发布日期YYYY-MM-DD
forceUpdate boolean 是否强制更新(true 时用户不可跳过)
minimumVersion string 最低兼容版本(低于此版本的客户端必须更新)

增量更新说明blockMapUrl + blockMapSize 为可选字段。客户端检测到 blockMapSize > 0 时自动启用增量下载(仅下载变更区块,节省 30%-70% 流量)。不传或为 null 时客户端全量下载。


2. POST /api/v1/releases — 发布新版本(需要鉴权)

POST /api/v1/releases
Authorization: Bearer <UPDATE_API_KEY>
Content-Type: application/json

请求体:

{
  "platform": "win32",
  "edition": "personal",
  "latestVersion": "0.1.0",
  "downloadUrl": "https://heixiu.oss-cn-hangzhou.aliyuncs.com/releases/0.1.0/xxx.exe",
  "fileSize": 112910987,
  "sha512": "Base64...",
  "blockMapUrl": "https://heixiu.oss-cn-hangzhou.aliyuncs.com/releases/0.1.0/xxx.exe.blockmap",
  "blockMapSize": 152340,
  "changelog": "## 0.1.0\n\n- 新功能 A\n- 修复 B",
  "releaseDate": "2026-06-04",
  "forceUpdate": false,
  "minimumVersion": "0.0.0"
}

数据库表结构

CREATE TABLE releases
(
    id            BIGINT PRIMARY KEY AUTO_INCREMENT,
    platform      VARCHAR(10)  NOT NULL COMMENT 'win32 / darwin / linux',
    edition       VARCHAR(10)  NOT NULL COMMENT 'personal / enterprise',
    version       VARCHAR(20)  NOT NULL COMMENT '三段式 semver',
    file_url      VARCHAR(500) NOT NULL COMMENT '安装包 OSS HTTPS 地址',
    file_size     BIGINT       NOT NULL COMMENT '安装包字节数',
    sha512        VARCHAR(128) NOT NULL COMMENT '安装包 SHA512 Base64',
    blockmap_url  VARCHAR(500) COMMENT 'blockmap OSS 地址(可为空)',
    blockmap_size BIGINT COMMENT 'blockmap 文件字节数',
    changelog     TEXT COMMENT 'Markdown 格式更新日志',
    force_update  TINYINT(1)   DEFAULT 0,
    min_version   VARCHAR(20) DEFAULT '',
    release_date  DATE         NOT NULL,
    status        VARCHAR(10) DEFAULT 'draft' COMMENT 'draft / published / deprecated',
    created_at    DATETIME    DEFAULT CURRENT_TIMESTAMP,
    updated_at    DATETIME    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    UNIQUE KEY uk_platform_edition_version (platform, edition, version),
    INDEX         idx_platform_edition_status (platform, edition, status)
);

更新检查逻辑(参考实现)

GET /api/v1/update/check?platform=win32&version=0.0.3&edition=personal

1. 查询最新 published 版本:
   SELECT * FROM releases
   WHERE platform = 'win32'
     AND edition = 'personal'
     AND status = 'published'
   ORDER BY version DESC
   LIMIT 1

2. 比较版本号:
   - 请求 version >= 最新 version → hasUpdate = false
   - 请求 version <  最新 version → hasUpdate = true

3. 版本比较建议用 semver 规则major.minor.patch

文件托管OSS

  • 安装包和 .blockmap 文件托管在阿里云 OSS允许公开读取
  • 路径约定:releases/{version}/{filename}
  • 客户端通过 downloadUrl 直接下载,不经过后端 API

后端实现清单

  • 部署 GET /api/v1/update/check
  • 部署 POST /api/v1/releasesBearer Token 鉴权)
  • 创建 releases
  • 配置 OSS 公开读取 + HTTPS
  • 可选API Key 白名单 + 限流