Skip to content

Latest commit

 

History

History
466 lines (296 loc) · 10.3 KB

WebAPI.md

File metadata and controls

466 lines (296 loc) · 10.3 KB

公共响应体

身份验证、终端日志、运行任务、文件管理大类的大部分请求都遵循以下格式。

后续的请求文档中,会用“响应体(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", // 文件的修改状态
        },
        ...
    ]
}

文件的修改状态有这些:

  1. added:新添加的文件,使用绿色背景标识
  2. modified:修改的文件,使用黄色背景标识
  3. missing:缺失的文件,使用红色背景标识
  4. gone:被移动走的文件,使用青色背景标识
  5. come:被移动过来的文件,使用紫色背景标识
  6. 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

*星号:具体要下载的文件路径。

请求体:无

响应体:文件的原始二进制数据