Files
nanami-web/API.md

203 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nanami 启动器 API 文档
> Base URL: `https://nanami.rucky.cn`(或对应部署地址)
>
> 标注说明:🆕 新增 | ✏️ 有变动 | 无标注为原有不变
---
## 1. 检查更新 ✏️
检查指定软件是否有新版本。
```
GET /api/software/check-update?slug={slug}&versionCode={versionCode}
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| slug | string | 是 | 软件标识,如 `nanami-launcher``nanami-launcher-patch` |
| versionCode | number | 否 | 当前客户端版本号(整数),不传默认为 0 |
**响应示例:**
```json
{
"hasUpdate": true,
"forceUpdate": false,
"latest": {
"version": "1.3.0",
"versionCode": 130,
"changelog": "- 修复xxx\n- 新增xxx",
"downloadUrl": "https://nanami.rucky.cn/api/software/download/clxxx?source=launcher",
"fileSize": 52428800,
"minVersion": "1.0.0",
"createdAt": "2026-03-25T10:00:00.000Z"
}
}
```
**✏️ 变动说明**:返回的 `downloadUrl` 现在自动附带 `?source=launcher` 参数,启动器直接使用该 URL 下载即可,下载量会被单独统计为「客户端更新下载」,与网页端下载区分。启动器无需做任何额外处理。
---
## 2. 下载文件 ✏️
根据版本 ID 下载文件。通常不需要手动拼接,直接使用 check-update 返回的 `downloadUrl` 即可。
```
GET /api/software/download/{versionId}?source={source}
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| versionId | string | 是 | 路径参数,版本记录 ID |
| source | string | 否 | 下载来源标识,传 `launcher` 表示客户端更新下载 |
**响应**
- 本地文件:直接返回二进制流(`Content-Type: application/octet-stream`
- 外链文件302 重定向到外部 URL
**✏️ 变动说明**:新增 `source` 查询参数。当 `source=launcher`下载量会同时计入总下载量和启动器更新下载量两个计数器。check-update 返回的 URL 已自动包含此参数,启动器无需手动处理。
---
## 3. 获取最新版本信息(网页用)
获取 nanami-launcher 的最新版本信息或直接下载,主要给网页端使用。
```
GET /api/software/latest?info=1&track=1
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| info | string | 否 | 传 `1` 返回 JSON 元数据;不传则直接下载文件 |
| track | string | 否 | 仅在 `info=1` 时生效,传 `1` 同时计数下载量 |
**响应示例info=1**
```json
{
"available": true,
"version": "1.3.0",
"versionCode": 130,
"changelog": "...",
"fileSize": 52428800,
"createdAt": "2026-03-25T10:00:00.000Z",
"downloadUrl": "/api/software/download/clxxx",
"downloadType": "local"
}
```
> 此接口固定查询 slug 为 `nanami-launcher` 的软件,启动器通常使用 check-update 接口而非此接口。
---
## 4. 上报心跳(在线状态) 🆕
启动器定期调用此接口上报在线状态,建议每 **60 秒** 调用一次。超过 3 分钟无心跳视为离线。
```
POST /api/launcher/heartbeat
Content-Type: application/json
```
**请求体:**
```json
{
"deviceId": "unique-machine-id",
"os": "Windows",
"osVersion": "10.0.19045",
"appVersion": "1.3.0"
}
```
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| deviceId | string | **是** | 设备唯一标识,建议使用机器码或 UUID 持久化存储 |
| os | string | 否 | 操作系统名称,如 `Windows``macOS``Linux` |
| osVersion | string | 否 | 系统版本号,如 `10.0.19045``14.3` |
| appVersion | string | 否 | 启动器版本号,如 `1.3.0` |
**响应:**
```json
{ "ok": true }
```
**实现建议**
- 启动器启动时立即发送一次心跳,之后每 60 秒发送一次
- `deviceId` 需要在客户端持久化保存,确保同一台机器始终使用相同 ID
- IP 地址由服务端自动获取,无需客户端上报
- 网络失败时静默忽略即可,不影响启动器正常功能
---
## 5. 历史更新日志 🆕
查询指定软件的所有版本历史和更新日志,按版本号倒序排列。
```
GET /api/software/changelog?slug={slug}
```
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| slug | string | 是 | 软件标识,如 `nanami-launcher``nanami-launcher-patch` |
**响应示例:**
```json
{
"name": "Nanami 启动器(全量包)",
"slug": "nanami-launcher",
"versions": [
{
"version": "1.3.0",
"versionCode": 130,
"changelog": "- 新增xxx\n- 修复xxx",
"fileSize": 52428800,
"isLatest": true,
"forceUpdate": false,
"createdAt": "2026-03-25T10:00:00.000Z"
},
{
"version": "1.2.0",
"versionCode": 120,
"changelog": "- 优化xxx",
"fileSize": 50331648,
"isLatest": false,
"forceUpdate": false,
"createdAt": "2026-03-10T08:00:00.000Z"
}
]
}
```
**响应字段说明:**
| 字段 | 类型 | 说明 |
|------|------|------|
| versions[].version | string | 版本号 |
| versions[].versionCode | number | 版本号(整数),用于比较大小 |
| versions[].changelog | string | 更新日志内容 |
| versions[].fileSize | number | 文件大小(字节) |
| versions[].isLatest | boolean | 是否为当前最新版本 |
| versions[].forceUpdate | boolean | 是否为强制更新版本 |
| versions[].createdAt | string | 发布时间ISO 8601 |
---
## 接口一览
| 方法 | 路径 | 状态 | 用途 |
|------|------|------|------|
| GET | `/api/software/check-update` | ✏️ 变动 | 检查更新downloadUrl 已含 source 标记 |
| GET | `/api/software/download/{id}` | ✏️ 变动 | 下载文件,支持 source 参数区分来源 |
| GET | `/api/software/latest` | 无变动 | 获取最新版信息/下载(网页用) |
| GET | `/api/software/changelog` | 🆕 新增 | 查询历史更新日志 |
| POST | `/api/launcher/heartbeat` | 🆕 新增 | 上报在线状态 |