身份验证、终端日志、运行任务、文件管理大类的大部分请求都遵循以下格式。
后续的请求文档中,会用“响应体(data字段)”来代指下面的data字段的响应内容。不遵循此格式的接口,会用“响应体”来表示。
{
// 状态码,1代表成功,其它值则代表失败
"code": 1,
// 附带的消息,通常在失败的时候用来说明原因
"msg": "",
// 返回的数据,仅当请求成功时有值,失败则为null
// 部分接口可能没有data部分,但是code仍要进行检查和弹出toast提示
"data": { ... }
}
使用账号密码登录成功后,后端会返回一个Token。后续所有的API进行调用时,都需要携带此Token。
返回的Token在后续API调用时,需要放到请求头里,大概是这样:Token: xxxxxx
。
Post:/api/user/login
用途:使用账号和密码来登录,并获取服务端返回的token用于后续api调用的身份验证
请求体:
{
"username": "xxx", // 用户名
"password": "xxx" // 密码
}
响应体(data字段):
{
"token": "", // 登录成功后返回的token
}
Post:/api/user/logout
用途:退出登录。后端会将token标记为失效
响应体:无响应体
说明:前端发起此请求后,需要等待请求返回,但无需对响应的结果进行处理。同时前端清除保存的token即可
Post:/api/user/change-username
用途:修改密码(用户名支持中文和特殊符号,但不建议)
请求体:
{
"new_username": "xxx" // 新用户名
}
响应体(data字段):无data字段
说明:如果用户名修改成功,后端会将当前token销毁并要求重新登录。此时前端也需要同步丢弃token,并跳转到登录界面。(此过程后端无需重启,也不会中断正在运行的打包任务(如果有))
Post:/api/user/change-password
用途:修改密码(密码支持中文和特殊符号,但不建议)
请求体:
{
"old_password": "xxx", // 旧密码
"new_password": "xxx" // 新密码
}
响应体(data字段):无data字段
说明:如果密码修改成功,后端会将当前token销毁并要求重新登录。此时前端也需要同步丢弃token,并跳转到登录界面。(此过程后端无需重启,也不会中断正在运行的打包任务(如果有))
Post:/api/user/check-token
用途:单纯用来验证token的有效性,除此之外没有任何额外的功能和作用
请求体:无
响应体(data字段):无data字段
一些小功能。
Post:/api/misc/version-list
用途:获取所有的更新包列表和对应的更新日志信息
请求体:无
响应体(data字段):
{
versions: [
{
label: "", // 版本号
size: "", // 此版本的总更新量,单位字节
change_logs: "", // 更新记录
},
...
]
}
此接口用来获取后端任务终端里的日志文本。
Post:/api/terminal/full
用途:获取所有的日志输出
请求体:无
响应体(data字段):
{
// 这里可能会返回多条日志
"content": [
{
// 日志的记录时间,格式为unix时间戳。单位是秒
"time": 1732606868,
// 日志的内容
"content": "Diff (创建目录: 0, 更新文件: 2, 修改文件: 1, 删除目录: 0, 删除文件: 0, 移动文件: 0)",
// 日志的重要等级。可能的值:debug,info,warning,error
"level": "info"
},
...
]
}
Post:/api/terminal/more
用途:获取自从上次调用/api/terminal/full
或者/api/terminal/more
后的新产生的日志输出
请求体:无
响应体(data字段):
{
// 这里可能会返回多条日志
"content": [
{
// 日志的记录时间,格式为unix时间戳。单位是秒
"time": 1732606868,
// 日志的内容
"content": "Diff (创建目录: 0, 更新文件: 2, 修改文件: 1, 删除目录: 0, 删除文件: 0, 移动文件: 0)",
// 日志的重要等级。可能的值:debug,info,warning,error
"level": "info"
},
...
]
}
说明:前端登录后第一次获取运行日志需要使用/api/terminal/full
获取完整的日志,之后再使用/api/terminal/more
去获取增量日志。当前端切换到日志界面时,需要每隔一段时间轮询此接口,以确保能及时获取新的日志消息。
同一时间只能有一个任务在执行。暂时还没有办法同时执行多个任务。
此大类下所有的请求,都可以额外带上一个Wait
请求头(其值为空)。加上此参数后,请求不会立即返回,而是等待任务结束后请求才返回,同时也会响应输出的日志。此参数多用于手工调用此接口。如果是web页面请求则无需带上此参数。
Post:/api/task/status
用途:开始执行一个工作空间目录的文件修改任务
请求体:无
响应体(data字段):无data字段
Post:/api/task/pack
用途:开始执行一个更新包打包任务
请求体:无
请求体:
{
"label": "1.0.0", // 新包的版本号
"change_logs": "xxxx", // 新包的更新记录,使用UTF8编码
}
响应体(data字段):无data字段
Post:/api/task/combine
用途:开始执行一个更新包合并任务
请求体:无
响应体(data字段):无data字段
Post:/api/task/test
用途:开始执行一个更新包测试任务,模拟客户端的解压过程,检查更新包是否有损坏。
请求体:无
响应体(data字段):无data字段
Post:/api/task/revert
用途:开始执行一个工作空间目录的退回任务,将文件状态退回到上次打包后,并丢弃所有的文件修改,恢复如初。
请求体:无
响应体(data字段):无data字段
Post:/api/task/upload
用途:往远端存储服务器同步public目录下的文件,比如s3或者webdav。
请求体:无
响应体(data字段):无data字段
这里主要负责工作空间目录的文件管理操作
Get:/api/fs/disk-info
用途:用于获取后端的磁盘使用情况
请求体:无
响应体(data字段):
{
"total": 123456789, // 后端报告的磁盘可用空间总大小,单位为字节
"used": 123456789 // 后端报告的磁盘已用空间总大小,单位为字节
}
Get:/api/fs/list
用途:列出一个目录里的所有文件内容,同时包括文件变动情况
请求体:
{
"path": "" // 要列目录的路径,如果省略或者为空,则列出工作空间这个根目录
}
响应体(data字段):
{
"files": [
{
"name": "abc", // 文件名
"is_directory": true, // 是文件还是目录
"size": 4096, // 文件的大小
"ctime": 1731209924, // 文件的创建时间
"mtime": 1731209924, // 文件的修改时间
"state": "added", // 文件的修改状态
},
...
]
}
文件的修改状态有这些:
- added:新添加的文件,使用绿色背景标识
- modified:修改的文件,使用黄色背景标识
- missing:缺失的文件,使用红色背景标识
- gone:被移动走的文件,使用青色背景标识
- come:被移动过来的文件,使用紫色背景标识
- keep:无任何操作的文件,使用灰色背景标识
Post:/api/fs/upload
用途:将一个本地文件上传到后端
请求头:Path: xxxx
代表文件上传之后的落盘路径
请求体:要上传的文件的二进制数据
响应体(data字段):无data字段
如果请求返回的是成功的话,记得刷新一下文件列表
Post:/api/fs/download
用途:下载一个后端的文件,
请求体:
{
"path": "" // 要下载的文件路径
}
响应体(data字段):
{
"content": "xxxx", // 文件的完整内容(经过base64编码)
}
说明:此接口主要用于小文件的在线查看或者编辑一些txt,yml,json等格式的文件。文件大小在1m以下为最好。图片的显示建议调用后面的文件签名API。
Post:/api/fs/make-directory
用途:创建一个新的目录
请求体:
{
"path": "" // 要创建的目录的路径
}
响应体(data字段):无data字段
Post:/api/fs/delete
用途:删除一个后端文件或者目录
请求体:
{
"path": "" // 要删除的文件或者目录的路径
}
响应体(data字段):无data字段
Post:/api/fs/move
用途:移动一个后端文件或者目录到新的位置
请求体:
{
"from": "", // 原路径
"to": "" // 目标路径
}
响应体(data字段):无data字段
Post:/api/fs/sign-file
用途:获取一个后端文件的下载签名(签名有效期是2小时)
请求体:
{
"path": "" // 要下载的文件路径
}
响应体(data字段):
{
"signature": "xxxx" // 文件的路径和签名数据
}
Get:/api/fs/extract-file?sign=xxxxx
用途:从一个签名下载对应的原文件。获取到签名后,需要前端使用window.open()
引导浏览器打开新的页面以下载该原始文件
查询参数:sign
:签名数据,由/api/fs/sign-file
返回
请求体:无
响应体:文件的原始二进制数据
Get:/api/public/*
用途:向所有人提供文件分发服务,根目录是public而非workspace
*星号
:具体要下载的文件路径。
请求体:无
响应体:文件的原始二进制数据