Appearance
4. 接口参考
说明
- 完整路径 =
/api/mlinkClient+ 分组前缀 + Meta path。下文路径一律写完整路径。- 「权限」列:需 token 指落在挂了 gtoken 的分组里;免认证 指白名单或未挂 gtoken 的路径。
- 未特别标注时,
Content-Type为application/json,{DeviceCode}为路径参数。
4.1 用户与登录
分组前缀:/api/mlinkClient/system(版本接口在 /api/mlinkClient/version)。
4.1.1 登录
- 方法与路径:
POST /api/mlinkClient/system/login(注册为 ALL,任意方法均可) - 权限:免认证
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
login_name | string | 是 | 登录账号;为空直接失败「账号或密码不能为空」 |
password | string | 是 | md5(明文) 的小写 hex(32 位) |
- 成功响应:
{"code":200,"msg":"登录成功","data":{"token":"...","user_key":"User:1","user_name":"管理员","login_name":"admin","status":0,"info":"","expire":86400}} - 失败响应:
{"code":-1,"msg":"账号或密码错误","data":""};锁定类见 2.3.1 - 相关错误码:
200、-1
4.1.2 登出
- 方法与路径:
POST /api/mlinkClient/system/logout - 权限:需 token
- 请求字段:无
- 响应:gtoken 标准登出响应
- 相关错误码:
200、-1
4.1.3 版本信息
- 方法与路径:
GET /api/mlinkClient/version/get - 权限:免认证
- 请求字段:无
- 响应:
{"code":200,"msg":"ok","version":{"major":1,"minor":2,"patch":3,"commit":"..."}} - 相关错误码:通用(
200/-1/51)
4.1.4 注册用户
- 方法与路径:
POST /api/mlinkClient/system/user/create - 权限:免认证(白名单,用于首次初始化)
- 请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
login_name | string | 是 | 用户登录名;命中服务端黑名单时返回「该账户为系统特殊账户,禁止注册」 |
password1 | string | 是 | 密码(MD5 hex) |
password2 | string | 是 | 确认密码;与 password1 不一致返回「两次密码不相同」 |
- 成功响应:
{"code":200,"msg":"ok","data":{"id":2}} - 失败响应:
账号已存在、当天注册账户数量已达上限,请于[xx]后重试、注册请求频繁,请稍后重试 - 相关错误码:
200、-1、51
4.1.5 删除用户
- 方法与路径:
DELETE /api/mlinkClient/system/user/delete - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 用户 ID,要求不小于 1 |
- 响应:
{"err":{"code":200,"msg":"ok"}} - 相关错误码:
200、-1
4.1.6 修改用户信息
- 方法与路径:
PUT /api/mlinkClient/system/user/update - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 用户 ID |
user_name | string | 否 | 显示名 |
info | string | 否 | 备注 |
phone | string | 否 | 手机号 |
email | string | 否 | 邮箱 |
- 响应:
{"err":{"code":200,"msg":"ok"}};用户不存在 →用户不存在 - 相关错误码:
200、-1
4.1.7 修改密码
- 方法与路径:
PUT /api/mlinkClient/system/user/update/password - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
password1 | string | 是 | 旧密码,md5(明文) 小写 hex |
password2 | string | 是 | 新密码,md5(明文) 小写 hex |
- 响应:
{"err":{"code":200,"msg":"ok"}};用户不存在 →用户不存在 - 相关错误码:
200、-1
4.1.8 用户列表
- 方法与路径:
GET /api/mlinkClient/system/user/list - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
page | int | 否 | 页码 |
size | int | 否 | 每页数量 |
id | int | 否 | 按用户 ID 筛选 |
user_name | string | 否 | 按显示名筛选 |
login_name | string | 否 | 按登录名筛选 |
phone | string | 否 | 按手机号筛选 |
creator | string | 否 | 按创建者筛选 |
- 响应:
{"code":200,"msg":"ok","data":{"list":[...],"total":1}} - 相关错误码:通用(
200/-1/51)
4.1.9 当前用户
- 方法与路径:
GET /api/mlinkClient/system/user/info - 权限:需 token
- 请求字段:无
- 响应:
{"code":200,"msg":"ok","data":{"id":1,"login_name":"admin"}} - 相关错误码:通用(
200/-1/51)
4.1.10 操作记录查询
- 方法与路径:
POST /api/mlinkClient/system/operate/record - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
page | int | 否 | 页码 |
size | int | 否 | 每页数量 |
beginTime | int | 否 | 开始时间,Unix 秒 |
endTime | int | 否 | 结束时间,Unix 秒 |
userId | int | 否 | ⚠️ 该筛选条件被服务端硬编码为 0 忽略,传了不生效 |
type | string | 否 | 类型筛选 |
module | string | 否 | 模块筛选 |
description | string | 否 | 描述关键字 |
- 响应:
{"list":[...],"total":0} - 相关错误码:通用(
200/-1/51)
【注意】当前审计触发点只覆盖登录、连接、恢复等少数动作,用户增删改、服务命令、配置下发尚未覆盖。
4.2 连接管理
分组前缀:/api/mlinkClient/system。连接即被管理的 DASS 网关。
4.2.1 创建连接
- 方法与路径:
POST /api/mlinkClient/system/conn/create - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
nick_name | string | 否 | 连接别名。不能含星号、问号、小于号、大于号、竖线、冒号、双引号、正斜杠、反斜杠;为空时自动取 host.port |
host | string | 是 | 网关 IP 或域名,需通过 IP/域名合法性校验 |
user_name | string | 否 | DAS 连接账号;为空时用内置默认值(新版本 sysadmin,旧版 admin) |
password | string | 否 | DAS 密码,须为 AES-CBC 加密后的结果;为空时用内置默认值(新版本 rsas@2024,旧版 sis) |
port | string | 是 | 端口号(字符串) |
tls | bool | 是 | 是否启用 TLS |
group | string | 否 | 设备分组名,不存在时自动创建 |
- 成功响应:
json
{
"code": 200,
"msg": "连接创建成功",
"data": {
"id": 4,
"deviceCode": "4",
"nickName": "测试网关A",
"host": "192.168.1.100",
"password": "<密文>",
"port": "8090",
"userName": "sysadmin",
"creator": "1",
"create_time": "2026-09-01 10:00:00",
"tls": "true",
"model": "DASS5-XXX",
"platform": "linux-amd64",
"version": "5.0.1",
"groupId": 1
}
}- 失败响应:
InvalidIPv4Address(无效地址)、ConnAlreadyExist(同用户下host+port重复)、OccupiedNickName(别名重复)、当前机器[host]设备码[deviceCode]已由[nick]使用、您所操作边缘智能终端管理平台版本[xx]过低,请升级软件重试、{"code":-1,"msg":"服务未启动"}、设备已离线,请稍后再试 - 相关错误码:
-1、51与 《用户手册》附录「错误码」→「连接管理」 全部连接类文案
【警告】
data.deviceCode就是后续所有{DeviceCode}要填的值。
【警告】生产环境务必显式传user_name与password,不要依赖内置默认凭据。
【存疑】连接密码 AES 加密所用的 key/IV 与前端约定一致,但二次开发若自实现加密,建议以真机联调结果为准(待真机确认) (与前端约定一致即可,二次开发建议以真机联调为准)
4.2.2 删除连接
- 方法与路径:
DELETE /api/mlinkClient/system/conn/delete - 权限:需 token
- 请求体(⚠️ 是 body,不是路径参数)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deviceCode | string | 是 | 连接 ID |
host | string | 否 | 网关地址 |
port | string | 否 | 端口 |
tls | bool | 否 | 是否 TLS |
id | int | 否 | 连接主键 ID |
- 成功响应:
{"code":200,"msg":"删除成功","data":{}} - 相关错误码:
200、-1、NonexistentData
【警告】删除连接不级联:网关上的服务/通道/测点不受影响,只是控制台不再展示该网关的配置树。
4.2.3 更新连接
- 方法与路径:
PUT /api/mlinkClient/system/conn/update - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deviceCode | string | 是 | 连接 ID(body 字段,用于定位) |
nick_name | string | 否 | 别名;重复返回 OccupiedNickName |
host | string | 否 | 网关地址;改后与已有连接重复返回 ConnAlreadyExist |
user_name | string | 否 | DAS 账号 |
password | string | 否 | DAS 密码(AES 加密) |
port | string | 否 | 端口 |
tls | bool | 否 | 是否 TLS |
group | string | 否 | 分组名 |
- 响应:
{"code":200,"msg":"...","data":{}} - 相关错误码:
200、-1、NonexistentData、ConnAlreadyExist、OccupiedNickName
4.2.4 连接列表
- 方法与路径:
GET /api/mlinkClient/system/conn/list - 权限:需 token
- 请求字段:无
- 响应结构:
code, msg
data.all { total, list[] } 全部(本用户)
data.add { total, list[] } 已添加
data.discover { total, list[] } 待发现
list[] = { id, status, deviceCode, nickName, host, userName, password(密文), port,
version, creator, modifier, create_time, update_time, tls, model, platform, group, flag }- 相关错误码:通用(
200/-1/51)
已实测(2026-09-12,31 条连接的现场):
data下三个分组都存在 ——data.all.total=31(全部连接)、data.add.total=31(可添加/已纳管)、data.discover.total=0(待发现)。
取deviceCode用data.all.list[].deviceCode✓
【注意】列表接口会原样回显密码密文,客户端需自行脱敏。
4.2.5 首页连接列表
- 方法与路径:
POST /api/mlinkClient/system/conn/list/refer - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
keywords | string | 否 | 关键字。⚠️ 前端两处写法不一致(keyWords 与 keywords),本指南采用 API 结构体的 keywords |
group | string | 否 | 分组名 |
- 响应:
all、add、discover、offline四组,每组{total,list[]} - 相关错误码:通用(
200/-1/51)
4.2.6 测试连接
- 方法与路径:
POST /api/mlinkClient/system/conn/test - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
nick_name | string | 否 | 别名 |
host | string | 是 | 网关地址 |
user_name | string | 否 | DAS 账号 |
password | string | 否 | DAS 密码(AES 加密) |
port | string | 是 | 端口 |
tls | bool | 是 | 是否 TLS |
- 响应:
{"major":5,"minor":0,"patch":1} - 相关错误码:
-1、51
4.2.7 重新连接并刷新状态
- 方法与路径:
POST /api/mlinkClient/system/conn/fresh/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"code":200,"msg":"ok","data":{"baseInfo":{},"flowInfo":{},"interInfo":{},"monitorInfo":{},"netInfo":{},"runningInfo":{}}} - 相关错误码:
-1、NonexistentData、HostIsDown
4.2.8 查询 TLS 状态
- 方法与路径:
GET /api/mlinkClient/system/conn/tls/status - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deviceCode | string | 是 | query 参数,连接 ID |
- 响应:
{"code":200,"msg":"ok","data":{...}}(连接基础信息结构) - 相关错误码:通用(
200/-1/51)
4.2.9 gRPC 连接缓存
- 方法与路径:
GET /api/mlinkClient/system/conn/cache - 权限:需 token
- 请求字段:无
- 响应:
{"table":{"<deviceCode>":"<host:port>"}} - 相关错误码:通用(
200/-1/51)
4.2.10 云平台设备码设置
- 方法与路径:
POST /api/mlinkClient/system/conn/setting/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
cloud_key | string | 是 | 云平台 Key;为空返回 EmptyCloudKey |
protocol | string | 否 | 协议类型 |
- 响应:
{"code":200,"msg":"ok","data":{"device_code":"...","cloudKey":"...","protocol":"..."}} - 相关错误码:
-1、EmptyCloudKey、EmptyHost、OccupiedDeviceCode、设备码[%v]已由用户[%v]绑定至[%v],请使用其他设备码进行绑定
4.2.11 云平台 Key 校验
- 方法与路径:
POST /api/mlinkClient/system/conn/setting/test/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
cloud_key | string | 是 | 待校验的云平台 Key |
- 响应:
{"code":200,"msg":"ok","data":{...}} - 相关错误码:
-1、51
4.2.12 获取云平台设备码
- 方法与路径:
POST /api/mlinkClient/system/conn/cloudKey - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
deviceCode | string | 是 | body 字段,连接 ID |
- 响应:
{"data":{"device_code":"...","cloudKey":"...","protocol":"..."}} - 相关错误码:
-1、EmptyDeviceCode、NonexistentData
4.2.13 获取云平台鉴权 URL
- 方法与路径:
POST /api/mlinkClient/system/conn/cloudKey/url - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
cloud_key | string | 是 | 云平台 Key |
- 响应:
{"data":{"device_code":"...","cloudCenterUrl":"...","cloudKey":"..."}} - 相关错误码:
-1、51
4.2.14 设备分组列表
- 方法与路径:
GET /api/mlinkClient/system/conn/group/query - 权限:需 token
- 请求字段:无
- 响应:
{"code":200,"msg":"ok","data":["组A","组B"]} - 相关错误码:通用(
200/-1/51)
4.2.15 新增分组
- 方法与路径:
POST /api/mlinkClient/system/conn/group/add - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
group | string | 是 | 分组名 |
- 响应:
{"Id":1} - 相关错误码:通用(
200/-1/51)
4.2.16 更新分组
- 方法与路径:
PUT /api/mlinkClient/system/conn/group/update - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
oldGroup | string | 是 | 原分组名 |
newGroup | string | 是 | 新分组名 |
- 响应:
data(分组数组) - 相关错误码:通用(
200/-1/51)
4.2.17 删除分组
- 方法与路径:
DELETE /api/mlinkClient/system/conn/group/delete - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
group | string | 是 | 待删除的分组名 |
- 响应:
data(分组数组) - 相关错误码:通用(
200/-1/51)
4.2.18 未注册的路径
| 路径 | 状态 |
|---|---|
GET /api/mlinkClient/system/conn/host/{DeviceCode} | 未注册:请求结构体存在但无处理器,调用会 404。已确证废弃 |
4.3 采集服务
分组前缀:/api/mlinkClient/config。采集服务对应界面的「数据采集 → 采集服务」。
服务对象的关键约定:
| 约定 | 值 |
|---|---|
| 服务名长度 | 不超过 11 字节(中文按 UTF-8 3 字节计,即最多 3 个汉字) |
| 服务名唯一性 | 全局唯一 |
das_type | das=采集服务,upload=上传服务 |
| 接口一次处理几条 | 只取 app[0],一次一个服务 |
4.3.1 创建服务(JSON)
- 方法与路径:
POST /api/mlinkClient/config/das/insert/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 服务数组,仅取 app[0];空数组会静默返回 {"app":null} 且不报错 |
app[].name | string | 是 | 服务名,不超过 11 字节,全局唯一;API 层无长度校验,超长由设备端拒绝 |
app[].type | string | 是 | 驱动名,须为网关已安装驱动(POST /config/driver/list/{dc} 可查) |
app[].das_type | string | 是 | das=采集服务,upload=上传服务 |
app[].flag | string | 否 | 标志位。⚠️ 代码全程未读取该字段,传了不生效【存疑】 |
app[].log_level | string | 否 | 日志级别,取值是设备端 proto 枚举的字符串 key【存疑】合法枚举值未在代码中列举(待真机确认) |
app[].desc | string | 否 | 服务描述。文档写不超过 200 字符,代码无校验 |
app[].para | object | 否 | 驱动配置。字段名来自驱动动态表单(GET /config/driver/conf/{dc}?name=<驱动>)。⚠️ 为空时设备端返回「创建服务驱动配置不能为空」 |
- 成功响应(裸结构):
json
{ "app": [ { "id": "", "name": "SVC_A", "err": { "code": 200, "msg": "ok" }, "channels": null } ] }- 失败响应:空
app→{"app":null}(HTTP 200,不报错);gRPC 错误 →{"code":-1,"msg":"..."} - 相关错误码:
-1、51、「创建服务驱动配置不能为空」、「服务未启动」
【警告】成功响应没有外层
code/msg,判成功看app[0].err.code == 200。
【警告】app[0].id恒为空、channels恒为null,不要用于定位。
【警告】部分成功风险:das_type=das且网关版本低于 5.0.0 时服务端会自动创建默认通道DEC;若 DEC 建失败,接口报错但服务已经建成。
4.3.2 创建服务(表单,含驱动动态字段)
- 方法与路径:
POST /api/mlinkClient/config/das/form/insert/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 服务名,不超过 11 字节 |
type | string | 是 | 驱动名 |
das_type | string | 是 | das 或 upload |
flag | string | 否 | 标志位,代码未使用 |
app_log_level | string | 否 | 日志级别 |
desc | string | 否 | 描述 |
| 驱动动态字段 | string | 视驱动而定 | 由服务端从请求中动态提取,构成 para |
- 响应:同 4.3.1
- 相关错误码:同 4.3.1
【注意】表单路径不判断网关版本就创建 DEC 通道,与 JSON 路径行为不一致。
4.3.3 更新服务
- 方法与路径:
POST /api/mlinkClient/config/das/update/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅取 app[0] |
app[].name | string | 是 | 服务名(定位用) |
app[].type | string | 否 | ⚠️ 送入设备端的更新结构体不含该字段,实际不可改 |
app[].das_type | string | 否 | ⚠️ 同上,实际不可改 |
app[].log_level | string | 否 | 可改 |
app[].desc | string | 否 | 可改 |
app[].keywords | string | 否 | 关键字 |
app[].para | object | 否 | 驱动配置,可改 |
- 响应:
{"app":[{"name":"SVC_A","err":{"code":200,"msg":"ok"}}]} - 相关错误码:
-1、51
4.3.4 更新服务(表单)
- 方法与路径:
POST /api/mlinkClient/config/das/form/update/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data - 字段:
name、type、das_type、app_log_level、desc、keywords+ 驱动动态字段 - 响应:同 4.3.3
- 相关错误码:
-1、51
4.3.5 删除服务
- 方法与路径:
DELETE /api/mlinkClient/config/das/delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅需 app[].name;len(app)==0 返回「参数不能为空」 |
- 响应:
{"app":[{"name":"SVC_A","err":{"code":200,"msg":"ok"}}]} - 相关错误码:
-1、「参数不能为空」
【警告】删除服务前没有引用保护:服务端不检查该服务是否被上传服务引用。删除前请自行确认引用关系,或收回人工确认。
4.3.6 服务启停 / 重启
- 方法与路径:
POST /api/mlinkClient/config/das/cmd/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅取 app[0];len(app)==0 返回「参数不能为空」 |
app[].name | string | 是 | 服务名 |
app[].cmd | string | 是 | 仅识别 start、stop、restart;其它值静默什么都不做 |
- 响应:
{"app":[{"id":"","name":"SVC_A","keywords":"","cmd":"start","err":{"code":200,"msg":"ok"}}]};start/stop/restart三个分支都会解析设备端返回的错误码,非空时code取首个错误码、msg取标志位 - 相关错误码:
-1、200、「参数不能为空」、设备端返回的具体错误码
【注意】对已启动服务再
start、已停止服务再stop的行为由设备端决定,接口本身不保证幂等。
4.3.7 服务 / 通道状态
- 方法与路径:
GET /api/mlinkClient/config/das/state/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名 |
channel | string | 否 | query 参数,通道名 |
- 响应:纯文本
running或stop;app为空时返回文本服务参数为空;未找到时返回空 JSON - 相关错误码:无错误码(纯文本)
4.3.8 服务树
- 方法与路径:
GET /api/mlinkClient/config/das/tree/{DeviceCode} - 权限:需 token
- 请求字段:无
响应为节点数组:
[]{
nodeId: "App" + 服务名,
entityId: 服务名,
entityType: "App",
text, leaf: false,
code(仅网关 5.0.0 及以上返回),
extend: { devicecode, text, driverType, driverVersion, status, up, realtimeLog, cpuUsage, memUsage },
children: []{
nodePid, nodeId, entityId, entityType: "Channel", text, leaf,
extend: { ..., down, realtimeLog }
}
}- 相关错误码:
-1、NonexistentData
【注意】服务树只返回
das_type=das的采集服务,上传服务不在其中,请用GET /config/upload/tree/{dc}。
【警告】通道nodeId是「服务名 + 通道名」无分隔符拼接。若服务名与通道名互为前缀(如MC06与MC0606),自行做映射时会误匹配;请在命名上避免互为前缀。
4.3.9 服务存在性校验
- 方法与路径:
POST /api/mlinkClient/config/das/check/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名;为空返回「请求服务名不能为空」 |
- 响应:纯文本
true或false - 相关错误码:「请求服务名不能为空」
【注意】该接口是建服务前做幂等判断的推荐手段。
4.3.10 服务配置详情
- 方法与路径:
GET /api/mlinkClient/config/das/get/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名,必填校验 |
- 响应:
{"name":"SVC_A","type":"...","das_type":"das","log_level":"...","desc":"...","para":{...},"_sys_points":[...]} - 相关错误码:
-1、「服务不存在」
4.3.11 历史数据回补
- 方法与路径:
POST /api/mlinkClient/config/das/data/history/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
svc | string | 是 | 服务名 |
begin | int | 是 | 开始时间,毫秒时间戳(服务端除以 1000 转秒下发) |
end | int | 是 | 结束时间,毫秒时间戳 |
- 响应:
{"err":{"code":200,"msg":"ok"}} - 失败响应:
begin大于end→{"code":-1,"msg":"时间不正确 开始时间不能大于结束时间"};服务不存在 →{"code":-1,"msg":"服务不存在<svc>"} - 相关错误码:
200、-1
4.3.12 上行状态
- 方法与路径:
GET /api/mlinkClient/config/das/up_status/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名,必填校验 |
- 响应:
{"up":100} - 相关错误码:
-1、「服务不存在」
4.3.13 下行状态
- 方法与路径:
GET /api/mlinkClient/config/das/down_status/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名,必填校验 |
channel | string | 否 | query 参数,通道名 |
- 响应:采集服务返回
{"down":...};上传服务返回{"up":...,"down":...} - 相关错误码:
-1、「服务不存在」、「通道不存在」
4.3.14 非上传服务树
- 方法与路径:
GET /api/mlinkClient/config/transfer/tree/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"code":0,"msg":"ok","data":[{"serviceId":"...","serviceName":"SVC_A","channelList":[{"channelId":"...","channel":"CH1"}]}]} - 相关错误码:通用(
200/-1/51)
4.4 采集通道
分组前缀:/api/mlinkClient/config。通道对应界面的「数据采集 → 采集服务 → 通道」。
通道对象的关键约定:
| 约定 | 值 |
|---|---|
| 通道名长度 | 不超过 12 字节,同服务下唯一 |
| 保留名 | 不能为 dec(不区分大小写)、导入路径下还不能为 driver 或 channel |
| 一次处理几条 | 服务端只取 channels[0],一次只能建 1 个通道 |
| 别名字段名 | 创建用 alisa,更新用 alias(不一致) |
4.4.1 创建通道(JSON)
- 方法与路径:
POST /api/mlinkClient/config/das/channel/insert/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅取 app[0];空数组静默返回 {} |
app[].name | string | 是 | 所属服务名(须已存在) |
app[].channels | array | 是 | 只取 channels[0];⚠️ 传空数组会触发服务端 panic |
app[].channels[].name | string | 是 | 通道名;不区分大小写地拦截 dec(返回 {"code":-1,"msg":"不允许创建DEC通道"}) |
app[].channels[].alisa | string | 否 | 通道别名。字段名是 alisa |
app[].channels[].desc | string | 否 | 描述。⚠️ 代码未使用,传了被丢弃 |
app[].channels[].para | object | 否 | 驱动通道配置,字段名来自驱动动态表单 |
- 成功响应(控制器自写,无外层包装):
json
{ "code": 200, "msg": "ok", "app": "SVC_A", "channelName": "CH1" }- 失败响应:
- HTTP 500 +
{"code":"APP:BOX:CHANNEL:CREATE","error":"默认通道不可操作","method":"POST","request":"/das/channel/insert/{DeviceCode}"}(服务为 HTTP 驱动时) {"code":-1,"msg":"不允许创建DEC通道"}- HTTP 500 +
{"code":"APP:BOX:CHANNEL:CREATE","error":"<gRPC 错误>",...}
- HTTP 500 +
- 相关错误码:
200、-1、500、默认通道不可操作、APP:BOX:CHANNEL:CREATE、不允许创建DEC通道
4.4.2 创建通道(表单)
- 方法与路径:
POST /api/mlinkClient/config/das/channel/form/insert/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
service | string | 是 | 所属服务名 |
alisa | string | 否 | 通道别名 |
name | string | 是 | 通道名 |
chan_alisa | string | 否 | 通道别名(备用键) |
desc | string | 否 | 描述 |
| 驱动动态字段 | string | 视驱动而定 | 构成 para |
- 响应:同 4.4.1
- 相关错误码:同 4.4.1
4.4.3 更新通道(JSON)
- 方法与路径:
POST /api/mlinkClient/config/das/channel/update/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅取 app[0] |
app[].name | string | 是 | 所属服务名 |
app[].channels | array | 是 | 只取 channels[0] |
app[].channels[].name | string | 是 | 通道名(定位用) |
app[].channels[].alias | string | 否 | 通道别名。⚠️ 这里是 alias,与创建接口的 alisa 不同 |
app[].channels[].status | object | 否 | status / up / down。⚠️ 代码未使用,被丢弃 |
app[].channels[].keywords | string | 否 | ⚠️ 被丢弃 |
app[].channels[].desc | string | 否 | ⚠️ 被丢弃 |
app[].channels[].log_level | string | 否 | ⚠️ 被丢弃 |
app[].channels[].para | object | 否 | 驱动配置,实际生效 |
- 响应:
{"code":200,"msg":"ok","app":"SVC_A","channelName":"CH1"} - 失败响应:HTTP 驱动服务 → HTTP 500 +
{"code":"APP:BOX:CHANNEL:UPDATE",...};注意其request字段被误写成/das/channel/insert/{DeviceCode} - 相关错误码:
200、-1、500、APP:BOX:CHANNEL:UPDATE
【警告】更新通道时只有
name/alias/para会下发到设备端,status、keywords、desc、log_level全部被静默丢弃。
4.4.4 更新通道(表单)
- 方法与路径:
POST /api/mlinkClient/config/das/channel/form/update/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data - 字段:
service、name、alias、keywords、desc、channel_log_level+ 驱动动态字段 - 响应:
{"app":[{"name":"SVC_A","channelName":"CH1","err":{"code":200,"msg":"ok"}}]} - 相关错误码:
200、-1、500
4.4.5 删除通道
- 方法与路径:
DELETE /api/mlinkClient/config/das/channel/delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | app[]{id, name, keywords, channels[]{id, name, keywords}} |
- 成功响应:
{"code":200,"msg":"ok"} - 失败响应:HTTP 驱动服务 → HTTP 500 +
{"code":"APP:BOX:CHANNEL:DELETE","error":"默认通道不可操作",...} - 相关错误码:
200、500、APP:BOX:CHANNEL:DELETE
【注意】默认通道
DEC不可创建、不可删除;HTTP 驱动的服务其通道增删改会被整体拦截。
4.4.6 通道启停 / 重启
- 方法与路径:
POST /api/mlinkClient/config/das/channel/cmd/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | app[]{name, channels[]{name, cmd}};len(app)==0 返回「驱动名字不能为空」,len(channels)==0 返回「管道为空」 |
app[].channels[].cmd | string | 是 | 仅识别 start、stop、restart |
- 响应:
{"app":[{"name":"SVC_A","channels":[{"name":"CH1","cmd":"start","err":{"code":200,"msg":"ok"}}]}]}start/stop:设备端错误码为 0 →code=200,否则code=-1,msg取标志位restart:⚠️ 设备端返回值被丢弃,err.code恒为 0、msg恒为空
- 相关错误码:
200、-1、「驱动名字不能为空」、「管道为空」
【警告】通道重启接口的
err.code恒为 0,客户端会误判失败。建议改用stop+start两步。
4.4.7 通道列表
- 方法与路径:
POST /api/mlinkClient/config/das/channel/list/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | int | 否 | 每页数量 |
page | int | 否 | ⚠️ 直接作为 Offset 传给设备端,不是页码 |
filter.app | string | 否 | 按服务名筛选 |
filter.status | string | 否 | ⚠️ 代码未使用 |
filter.channel | string | 否 | 按通道名筛选 |
filter.keywords | string | 否 | ⚠️ 代码未使用 |
- 响应:
{"count":1,"channels":[{"app":"SVC_A","name":"CH1","alias":"1#线","status":1,"createTime":1700000000000,"updateTime":1700000000000,"downStatus":1}]} - 相关错误码:通用(
200/-1/51)
4.4.8 通道存在性校验
- 方法与路径:
GET /api/mlinkClient/config/das/channel/check/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名 |
channel | string | 是 | query 参数,通道名 |
- 响应:纯文本
true或false;app或channel为空时返回空响应 - 相关错误码:无错误码(纯文本)
4.4.9 通道配置详情
- 方法与路径:
GET /api/mlinkClient/config/das/channel/get/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名,必填校验 |
channel | string | 是 | query 参数,通道名,必填校验 |
- 响应:
{"app":[{"name":"SVC_A","channels":[{"name":"CH1","para":{...},"alias":"1#线"}]}]} - 相关错误码:
-1、51
4.4.10 导入通道模板
- 方法与路径:
POST /api/mlinkClient/config/das/channel/import/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
driver | string | 是 | 驱动名,须与模板内 sheet 一致 |
version | string | 是 | 驱动版本,须与模板内 sheet 一致 |
file | file | 是 | 通道模板 xlsx |
Excel 结构:sheet driver(A1 驱动名、B1 版本号);sheet channel(A1 通道名、B1 别名、C1 点表 sheet 名、D1 起为驱动配置 key);每个通道一个 sheet。
- 响应:
{"count":1,"channels":[{"name":"CH1","alias":"1#线","para":{...},"point_sheet":"xxx.Sheet1"}]} - 失败响应:
不合法的通道文件: driver sheet 存在错误、不合法的通道文件: channel sheet 存在错误、通道名不得为空、通道名不能为 driver 或 channel、点表(Sheet)名不能为 driver 或 channel、驱动 config.json 存在错误 - 相关错误码:
-1、51与上述文案
【注意】导入接口只解析不创建,解析结果需要再调 4.4.13 的批量建通道接口。
【存疑】驱动 config.json 存在错误的精确触发行未定位(待真机确认) (需在真机执行写操作才能触发,本文档未做该类验证)
4.4.11 导出通道
- 方法与路径:
POST /api/mlinkClient/config/das/channel/export/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
service | string | 是 | 服务名 |
driver | string | 是 | 驱动名 |
version | string | 是 | 驱动版本 |
- 响应:文件流,
application/octet-stream,文件名{服务名}.xlsx - 相关错误码:
-1、51
【注意】导出文件中的测点表头在第 2 行(第 1 行为空),共 21 列。回导时不要按第 1 行取表头。
4.4.12 批量建通道
- 方法与路径:
POST /api/mlinkClient/config/das/channel/batch/insert/{DeviceCode} - 权限:需 token
- Content-Type:
application/json
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
service | string | 是 | 目标服务名 |
driver | string | 是 | 驱动名 |
import | []byte | 否 | 通道模板 Excel 的原始字节(base64 传输) |
channels | array | 是 | []{name, alias, para{}, point_sheet, point_file} |
channels[].point_sheet | string | 否 | 格式为 {文件名}.{Sheet名},由 4.4.10 导入接口返回;与 point_file 二选一 |
channels[].point_file | []byte | 否 | 测点 Excel 原始字节;与 point_sheet 二选一 |
- 响应:
{"job_token":"<uuid>"} - 相关错误码:
-1、51、找不到使用驱动 %s,名为 %s 的服务
4.4.13 批量进度
- 方法与路径:
GET /api/mlinkClient/config/das/channel/batch/progress/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
job_token | string | 是 | query 参数,4.4.12 返回的任务 token |
- 响应:
json
{
"finished": 0,
"bar": 0.5,
"progress": [
{ "job_name": "CH1", "job_status": 0, "reason": "", "failed_file_path": "" }
]
}| 字段 | 类型 | 说明 |
|---|---|---|
finished | int | 0=进行中,1=完成,-1=失败 |
bar | float | 进度,取值 0 ~ 1 |
progress[].job_status | int | 0 / 1 / -1 |
progress[].reason | string | 失败原因 |
progress[].failed_file_path | string | 失败文件路径 |
- 失败响应:token 无效或过期 →
错误的 token 或已经过期 - 相关错误码:
-1、「错误的 token 或已经过期」
4.4.14 通道克隆
- 方法与路径:
POST /api/mlinkClient/config/das/channel/clone/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
dst_name | string | 是 | 目标通道名 |
src_name | string | 是 | 源通道名 |
service_name | string | 是 | 服务名 |
alias | string | 否 | 目标通道别名 |
para | object | 否 | 目标通道驱动配置 |
- 响应:
{"code":200,"msg":"ok"} - 相关错误码:
-1、51
【警告】克隆失败时
code不是-1而是0(服务端未赋值),容易误判为成功。判成功请用code == 200。
4.4.15 通道运行信息
- 方法与路径:
GET /api/mlinkClient/config/das/channel/info/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
Name | string | 是 | query 参数,通道名。⚠️ 首字母大写 |
- 响应:大写字段名且全为字符串:
json
{ "Code": "200", "Msg": "ok", "Pid": "1234", "CPUPercent": "0.5", "MemoryPercent": "1.2", "CreateTime": "1700000000" }- 相关错误码:通用(
200/-1/51)
【注意】该接口字段风格与其它接口不一致,解析时注意大小写。
4.5 采集测点
分组前缀:/api/mlinkClient/config。测点对应界面的「数据采集 → 采集服务 → 测点」。
4.5.1 测点导入(推荐路径)
- 方法与路径:
POST /api/mlinkClient/config/point/import/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | file | 是 | 测点表 xlsx。列名与长度约束见第 5 章;必填列为点名与点的类型 |
sn | string | 是 | query 参数,服务名 |
cn | string | 是 | query 参数,通道名 |
- 成功响应:
json
{ "total": 1000, "successNum": 998, "failNum": 2, "tempFileName": "data/point_reason/<uuid>/SVC_A_CH1failure.xlsx" }- 失败报告:xlsx 中 A ~ U 列为原始 21 列,V 列为
code(-1),W 列为失败原因 - 相关错误码:
-1、51与第 5 章各字段校验文案
【注意】导入按 5000 点/批 分片,通过 gRPC 流式下发。
【警告】该路径是二次开发的首选:一次可导入大量测点,且能用失败报告精确定位问题。逐点 JSON 新增仅适合少量补录。
4.5.2 测点新增(JSON,逐点)
- 方法与路径:
POST /api/mlinkClient/config/point/insert/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅取 app[0];app[0].name 为空时静默返回 |
app[].name | string | 是 | 服务名 |
app[].channels | array | 是 | 仅取 channels[0] |
app[].channels[].name | string | 是 | 通道名 |
app[].channels[].points | array | 是 | 测点数组 |
points[].pn | string | 是 | 点名。不超过 60 字节,不能含 . |
points[].an | string | 否 | 别名,不超过 256 字节 |
points[].rt | string | 是 | 点的类型,取值 0 ~ 7(见 5.2) |
points[].eu | string | 否 | 量纲,不超过 12 字节 |
points[].ed | string | 否 | 描述,不超过 512 字节 |
points[].ad | string | 否 | 地址信息,不超过 4096 字节 |
points[].sr | string | 否 | 采集点类型(如 INT16、FLOAT32),取值由 GET /config/driver/sr/sn/{dc}?app=<服务名> 给出 |
points[].ae | string | 是 | 控制属性。⚠️ 只可靠地接受数字字符串 "0"、"1"、"2";传中文会静默变成 0。空值被拦,「控制属性不能为空」 |
points[].fk | string | 是 | 比例系数。解析失败报「比例系数(FK) float类型,不能为0, 默认为1」 |
points[].fb | string | 是 | 偏移量。解析失败报「偏移量(FB) float类型,默认为0」 |
points[].bv | string | 是 | 量程下限。解析失败报「量程下限(BV) float类型,默认为0」 |
points[].tv | string | 是 | 量程上限。解析失败报「量程上限(TV) float类型,默认为100」;tv 小于等于 bv 报「tv <= bv 不合法」 |
points[].fq | string | 否 | 分辨率。解析失败或为负报「分辨率不能为负整数」 |
points[].kr | string | 否 | 特征字,不超过 16 字节 |
points[].kz | int32 | 否 | 压缩类型,0=死区、1=线性、2=无压缩 |
points[].fm | int32 | 否 | 显示格式(见 5.5;枚举取值以真机为准) |
points[].db | float32 | 否 | 死区,非负数 |
points[].dt | int32 | 否 | 死区类型,0=PCT、1=ENG |
points[].id | string | 否 | 测点 ID。有值时须不小于 1024;留空由设备端实时库自增分配 |
- 成功响应:
json
{
"app": [
{ "name": "SVC_A",
"channels": [
{ "name": "CH1", "err": { "code": 200, "msg": "ok" },
"points": [ { "id": 1024, "pn": "TAG01", "err": { "code": 200, "msg": "ok" } } ] } ] }
]
}- 相关错误码:
-1、200、「控制属性不能为空」、「tv <= bv 不合法」、「分辨率不能为负整数」及第 5 章各类型错误文案
【警告】
points[].ae在 API 结构体中声明为 string,但服务端用整数转换读取。传「读」「写」「读写」时转换失败会静默得到 0(读),「写」也被当成「读」。JSON 路径请只传"0"、"1"、"2";中文枚举只适用于文件导入路径。
【警告】成功时响应可能是{"app":[]}(服务端仅在设备端返回错误码时才填充app),不要据此判定失败。
4.5.3 测点更新
- 方法与路径:
POST /api/mlinkClient/config/point/update/{DeviceCode} - 权限:需 token
- 请求体:与 4.5.2 同构,另外支持扩展字段
un、sn、cn、gn、flag、um、pt、kt、ex、ap、lc、h4、h3、zh、hl、ll、zl、l3、l4、ct、as、tm、av、redata1~redata3、create_time、update_time - 校验规则:同 4.5.2
- 响应:
app[]{id,name,err,channels[]{id,name,err,points[]{id,pn,gn,err}}} - 相关错误码:同 4.5.2
4.5.4 测点删除
- 方法与路径:
DELETE /api/mlinkClient/config/point/delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | 仅取 app[0] |
app[].id | int | 否 | 服务 ID(定位用) |
app[].name | string | 是 | 服务名 |
app[].das_type | string | 否 | 服务类型 |
app[].keywords | string | 否 | 关键字 |
app[].channels | array | 是 | channels[]{id, name, keywords, points[]{id, pn, gn}} |
app[].channels[].points | array | 是 | 待删除测点,可按 id 或 pn 指定 |
- 响应:
app[]{name,channels[]{name,err{code,msg}}} - 相关错误码:
-1、51
4.5.5 测点清空
- 方法与路径:
DELETE /api/mlinkClient/config/point/clear/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | array | 是 | app[]{name, channels[]{name}};清空指定通道下的全部测点 |
- 响应:
app[]{name,err,channels[]{name,err{code,msg}}} - 相关错误码:
-1、51
4.5.6 测点清洗
- 方法与路径:
POST /api/mlinkClient/config/point/erase/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"err":{"code":200,"msg":"OK"}} - 相关错误码:
-1、51
【警告】删除与清空接口是 DELETE 方法(旧文档写成 POST 是错的)。
已实测(2026-09-12):point/erase不是恒成功——响应体是{"err":{"code":…,"msg":…}}
(用err包裹,不是标准{code,msg,data});DeviceCode不存在时返回{"err":{"code":-1,"msg":"sql: no rows in result set"}}。判成败要读err.code。
4.5.7 测点查询
- 方法与路径:
POST /api/mlinkClient/config/point/select/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit.page | string | 否 | 页码 |
limit.limit | string | 否 | 每页数量 |
limit.order | string | 否 | 排序字段 |
limit.sort | string | 否 | 排序方向 |
filter.app | string | 否 | 按服务名筛选 |
filter.channel | string | 否 | 按通道名筛选 |
filter.keyword | string | 否 | 关键字 |
filter.id | string | 否 | 按测点 ID 筛选 |
filter.gn | string | 否 | 按点组筛选 |
filter.rt | string | 否 | 按点的类型筛选,只认中文名(模拟量/开关量/短整数/长整数/浮点数/长整型/文本/二进制)。实测:"模拟量" → count=17;0 或 "0" → {"code":50,"msg":"invalid filter RT: 0"};"zzz" → 同样报错。传数字会失败 |
filter.ds | string | 否 | 按数据状态筛选,取值 Good、Bad、Timeouts、First、Unknown;非法值报 invalid filter DS: <值> |
control | string | 否 | single 或 group(<点组名>) |
- 响应:
count+points[](字段较多,含un、sn、cn、pn、gn、ed、rt、sr、ad、ae、redata1~redata3、create_time、update_time等),字段值均为字符串 - 相关错误码:
-1、51、invalid filter RT: %s、invalid filter DS: %s
4.5.8 测点导出
- 方法与路径:
POST /api/mlinkClient/config/point/export/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
filter.app | string | 否 | 服务名 |
filter.channel | string | 否 | 通道名 |
filter.keyword | string | 否 | 关键字 |
filter.rt | string | 否 | 点的类型 |
filter.ds | string | 否 | 数据状态 |
- 响应:文件流,文件名
{服务名}_{通道名}.xlsx,21 列,RT / KZ / DT 转为中文枚举 - 相关错误码:
-1、51
4.5.9 失败报告下载
- 方法与路径:
POST /api/mlinkClient/config/point/export/errInfo - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
tempFileName | string | 是 | 导入响应中的 tempFileName |
- 响应:文件流
- 相关错误码:
-1、51
4.5.10 导入模板下载
- 方法与路径:
POST /api/mlinkClient/config/point/import/template - 权限:需 token
- 请求字段:无
- 响应:文件流
collect-template.xlsx(21 列表头 + 1 行示例) - 相关错误码:通用(
200/-1/51)
4.5.11 分类查询(含上传关联)
- 方法与路径:
POST /api/mlinkClient/config/point/select/filter/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
filter.app | string | 否 | 服务名 |
filter.channel | string | 否 | 通道名 |
filter.ds | string | 否 | 数据状态 |
filter.keyword | string | 否 | 关键字 |
filter.usn | string | 否 | 上传服务名筛选 |
limit.page | int | 否 | 页码 |
limit.limit | int | 否 | 每页数量 |
limit.order | string | 否 | 排序字段 |
limit.sort | string | 否 | 排序方向 |
- 响应:
{"count":0,"points":[{"sn":"...","cn":"...","pn":"...","gn":"...","ed":"...","rt":"...","sr":"...","ad":"...","ae":"...","an":"...","id":"...","bv":"...","tv":"...","fk":"...","fb":"...","fq":"...","create_time":"...","update_time":"..."}]} - 相关错误码:
-1、51
4.5.12 可控点分类查询
- 方法与路径:
POST /api/mlinkClient/config/point/control/select/filter/{DeviceCode} - 权限:需 token
- 请求体:同 4.5.9
- 响应:同 4.5.9
- 相关错误码:
-1、51
4.5.13 点名存在性检查
- 方法与路径:
GET /api/mlinkClient/config/das/channel/point/check/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | query 参数,服务名 |
channel | string | 是 | query 参数,通道名 |
point | string | 是 | query 参数,点名 |
- 响应:纯文本
true或false - 相关错误码:无错误码(纯文本)
【注意】该接口是测点导入前做幂等判断的推荐手段。
4.5.14 新建测点后触发监控
- 方法与路径:
POST /api/mlinkClient/config/point/data/monitor/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:纯文本(返回 deviceCode)
- 相关错误码:无错误码(纯文本)
4.5.15 报警规则列表
- 方法与路径:
POST /api/mlinkClient/config/point/alarm/list/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"list":[{"id":1,"ED":"...","gn":"...","ex":"...","h4":"...","h3":"...","ZH":"...","hl":"...","l4":"...","l3":"...","ZL":"...","LL":"..."}]} - 相关错误码:
-1、数据不合法
4.5.16 单条报警规则
- 方法与路径:
POST /api/mlinkClient/config/point/alarm/select/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 报警规则 ID |
- 响应:同 4.5.15 的单条结构
- 相关错误码:
-1、数据不合法
4.5.17 实时点接口
| 功能 | 方法与路径 | 备注 |
|---|---|---|
| 实时点 WS / 导出 | GET /api/mlinkClient/config/point/realtime/{DeviceCode} | 【存疑】响应结构体为空结构,实际写出内容未确证(待真机确认) |
| 点表 WS | GET /api/mlinkClient/config/point/ws/{DeviceCode} | 【存疑】同上(待真机确认) |
4.5.18 系统点导入
- 方法与路径:
POST /api/mlinkClient/config/sys/point/import/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | file | 是 | 系统点表 xlsx |
- 响应:
{"code":200,"msg":"ok"} - 相关错误码:
-1、51、「点表文件不包含任何工作簿」
4.5.19 系统点导出
- 方法与路径:
POST /api/mlinkClient/config/sys/point/export/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:【存疑】响应结构体为空,实际写出内容未确证(待真机确认) (需 WebSocket 客户端连接设备才可观察)
- 相关错误码:【存疑】(本轮真机验证为只读探测,未覆盖此项)
4.6 上传服务与上传测点
分组前缀:/api/mlinkClient/config。上传服务对应界面的「数据采集 → 上传服务」。
4.6.1 创建上传服务
与采集服务共用同一接口:POST /api/mlinkClient/config/das/insert/{DeviceCode},请求体把 app[0].das_type 置为 "upload"。字段表、响应与错误码见 4.3.1。
【注意】上传服务不会自动创建默认通道(默认通道只在
das_type=das时创建)。
4.6.2 上传服务树
- 方法与路径:
GET /api/mlinkClient/config/upload/tree/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
[]{
nodeId, entityId, entityType(默认 "App"), text(上传服务名), leaf(默认 false),
code(网关 5.0.0 及以上返回;【存疑】是否为服务进程名待真机确认),(本轮真机验证为**只读探测**,未覆盖此项)
extend: { driverType, status, up, down, realtimeLog, driverVersion }
}- 相关错误码:
-1、NonexistentData
4.6.3 从采集服务 / 通道批量生成上传点(核心链路推荐)
- 方法与路径:
POST /api/mlinkClient/config/point/upload/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
uname | string | 是 | 目标上传服务名 |
app | array | 是 | app[]{name, channels[]{name}}。channels 为空 → 按整个采集服务导;channels 非空 → 按通道导 |
- 响应:
{"err":{"code":200,"msg":"ok"}}(恒定返回成功) - 相关错误码:
-1(但响应不可信,见下方警告)
【警告】该接口的 gRPC 结果被丢弃,响应恒为成功。必须用 4.6.4 的
upoint/list回查确认。
4.6.4 上传测点列表
- 方法与路径:
POST /api/mlinkClient/config/upoint/list/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit.limit | int | 否 | 每页数量 |
limit.page | int | 否 | 页码 |
limit.order | string | 否 | 排序字段 |
limit.sort | string | 否 | 排序方向 |
filter.sn | string | 否 | 上传服务名 |
filter.channel | string | 否 | 通道名 |
filter.an | string | 否 | 别名 |
filter.as | string | 否 | 上传服务 / 通道归属 |
filter.gn | string | 否 | 点组 |
filter.id | string | 否 | 测点 ID |
filter.rt | string | 否 | 点的类型 |
filter.ds | string | 否 | 数据状态 |
filter.keyword | string | 否 | 关键字 |
- 响应:
count+points[],字段含un、sn、cn、pn、gn、ed、rt、sr、ad、ae、flag、um、an、id、bv、tv、fk、fb、fm、pt、kt、ex、ap、lc、h4、h3、zh、hl、ll、zl、l3、l4、kr、fq、eu、db、dt、kz、ct、as、tm、av、redata1~redata3、create_time、update_time,全部为字符串 - 相关错误码:
-1、51
4.6.5 上传测点新增(逐点)
- 方法与路径:
POST /api/mlinkClient/config/upoint/insert/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 上传服务名 |
points | array | 是 | 上传测点数组 |
points[].sn | string | 是 | 源采集服务名。⚠️ 若为 calc 或 sys(不区分大小写),fk / tv / bv 会被强制为 1 / 100 / 0 且跳过校验 |
points[].cn | string | 否 | 源通道名 |
points[].pn | string | 是 | 点名 |
points[].gn | string | 否 | 点组 |
points[].ed | string | 否 | 描述 |
points[].rt | int | 是 | 点的类型 |
points[].sr | string | 否 | 采集点类型 |
points[].ad | string | 否 | 地址信息,不超过 4096 字节 |
points[].ae | int | 是 | 控制属性 |
points[].an | string | 否 | 别名 |
points[].id | int | 是 | 源采集 / 计算测点的测点 ID(外键引用,不是新 ID) |
points[].bv | float32 | 否 | 量程下限 |
points[].tv | float32 | 否 | 量程上限;tv 小于等于 bv 报「tv <= bv 不合法」 |
points[].fk | float32 | 否 | 比例系数;为 0 报「比例系数(FK) float类型,不能为0, 默认为1」 |
points[].fb | float32 | 否 | 偏移量 |
points[].fq | float32 | 否 | 分辨率 |
points[].create_time | int64 | 否 | 创建时间 |
points[].update_time | int64 | 否 | 更新时间 |
- 响应:
{"points":[{"id":1024,"err":{"code":200,"msg":"ok"}}]}(恒定成功) - 相关错误码:
-1(响应不可信)
【警告】该接口的 gRPC 结果被丢弃,响应恒为成功,必须回查。
【存疑】um(同步属性)在新增接口中没有对应字段,只能在更新或文件导入时设置(待真机确认)。
4.6.6 上传测点更新
- 方法与路径:
POST /api/mlinkClient/config/upoint/update/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 上传服务名 |
type | string | 否 | 注释写 upload 或 das。⚠️ 代码完全未使用该字段【存疑】 |
points | array | 是 | ⚠️⚠️ 不能传空数组,否则服务端 panic(先取 [0] 再判长度) |
points[].um | int | 否 | 同步属性,取值见 5.6 |
points[].tv | float | 否 | 量程上限 |
points[].bv | float | 否 | 量程下限 |
points[].ad | string | 否 | 地址信息,不超过 4096 字节 |
points[].sr | string | 否 | 采集点类型 |
points[].fk | float | 否 | 比例系数,不能为 0 |
points[].fb | float | 否 | 偏移量 |
points[].fq | string | 否 | 分辨率 |
points[].rt | string | 否 | 点的类型 |
points[].ae | string | 否 | 控制属性 |
points[].id | int | 是 | 上传测点 ID |
- 校验:非
calc/sys时校验tv大于bv、地址信息不超过 4096 字节、fk不为 0 - 响应:
{"points":[{"id":1024,"err":{"code":200,"msg":"ok"}}]}(恒定成功) - 相关错误码:
-1、「tv <= bv 不合法」、「验证地址信息长度不能超过4096」、「比例系数(FK) float类型,不能为0, 默认为1」
【警告】
points传空数组会导致服务端 panic(HTTP 500),客户端必须保证至少 1 个点。
【警告】该接口的 gRPC 结果被丢弃,响应恒为成功,必须回查。
4.6.7 上传测点删除
- 方法与路径:
DELETE /api/mlinkClient/config/upoint/delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 上传服务名 |
type | string | 否 | 类型。⚠️ 代码未使用 |
points | array | 是 | points[]{sn, pn, id},按源服务名、点名、测点 ID 定位 |
- 响应:
{"err":{"code":200,"msg":"ok"}}(恒定成功) - 相关错误码:
-1(响应不可信)
4.6.8 上传测点清空
- 方法与路径:
DELETE /api/mlinkClient/config/upoint/clear/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 上传服务名,清空该服务下的全部上传点 |
- 响应:
{"err":{"code":200,"msg":"CLEAR_SUCCESS"}}(恒定成功) - 相关错误码:
-1(响应不可信)
【警告】删除与清空的 gRPC 结果同样被丢弃,响应恒为成功,必须用 4.6.4 的
upoint/list回查。
4.6.9 上传测点导入
- 方法与路径:
POST /api/mlinkClient/config/upoint/import/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | file | 是 | 上传测点表 xlsx,共 11 列:ID、点名、同步属性、量程上限、量程下限、地址信息(AD)、上传点类型(SR)、比例系数(FK)、偏移量(FB)、redata1、redata2 |
app | string | 是 | query 参数,上传服务名 |
- 必填列:
ID(不小于 1024,是已存在的采集 / 计算测点 ID 的外键引用,无自增语义) - 默认值:
FK=1、TV=100、BV=0、FB=0 - 分片:5000 点/批
- 响应:
{"total":100,"successNum":100,"failNum":0,"tempFileName":""} - 失败报告:与采集测点共用
POST /config/point/export/errInfo - 相关错误码:
-1、「ID不能为空」、「同步属性不能为空」、「量程上限不能为空」、「量程下限不能为空」、「比例系数不能为空」、「偏移量不能为空」、「点表文件不包含任何工作簿」
4.6.10 上传测点导出
- 方法与路径:
POST /api/mlinkClient/config/upoint/import/export/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
filter.app | string | 否 | 上传服务名 |
filter.channel | string | 否 | 通道名 |
filter.keyword | string | 否 | 关键字 |
filter.rt | string | 否 | 点的类型 |
filter.ds | string | 否 | 数据状态 |
- 响应:文件流
- 相关错误码:
-1、51
4.6.11 上传测点模板下载
- 方法与路径:
POST /api/mlinkClient/config/upoint/import/template - 权限:需 token
- 请求字段:无
- 响应:文件流(11 列传空模板)
- 相关错误码:
-1、51
4.6.12 外部上传按钮显示判定
- 方法与路径:
GET /api/mlinkClient/config/upoint/upload/external/display/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"display":true} - 相关错误码:
-1、51
4.6.13 外部数据库节点列表
- 方法与路径:
GET /api/mlinkClient/config/upoint/upload/external/nodes/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"nodes":["node1","node2"]} - 相关错误码:
-1、51
4.6.14 按外部节点添加上传点
- 方法与路径:
POST /api/mlinkClient/config/upoint/upload/external/insert/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
uname | string | 是 | 上传服务名 |
nodes | array | 是 | 外部数据库节点名数组(字符串数组) |
- 响应:空响应
- 相关错误码:
-1、51
4.6.15 系统点 / 计算点导图
- 方法与路径:
POST /api/mlinkClient/config/upoint/system/insert/{DeviceCode} - 权限:需 token
⚠️ 本接口当前不可用(实测 404,2026-09-12):路由在真机上未注册。
依据:api/config/upoint.go:312定义了UPointSystempointReq,但该结构体在internal/全仓零引用,
GoFrame 是按 controller 方法反查 API 结构体注册路由的,没有实现方法就不会注册。
全仓同类死路由共 6 条(/backup/{dc}、/off/{dc}、/reset/{dc}、/point/ws/:dc、本接口、PointWsRes),
其中只有本接口被写进了本文档。调用方不要依赖它;如需该能力,请先在后端补 controller 实现。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | 上传服务名 |
type | string | 是 | 类型 |
points | array | 是 | points[]{pn,ed,rt,an,id,kt,ex,eu,update_time} |
- 响应:【存疑】未在控制器中定位到对应实现,响应结构未确证(待真机确认)
- 相关错误码:【存疑】(本轮真机验证为只读探测,未覆盖此项)
4.7 应用包管理
本节覆盖驱动 / 应用包的上传、下载、删除,以及应用市场查询。
4.7.1 驱动 / 系统服务包上传
- 方法与路径:
POST /api/mlinkClient/system/driver/upload/{DeviceCode} - 权限:需 token
- Content-Type:
multipart/form-data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
file | file | 是 | .tar.gz 包,内含 Version.ini 与可执行文件;为空返回「请选择需要上传的文件」 |
- 响应:
{"name":"...","type":"das","code":...,"msg":"..."} - 相关错误码:
平台验证失败、升级包版本不兼容,请检查后重试、上传包类型验证失败,请上传系统升级包、类型不存在、版本验证失败、当前设备上已存在该版本[..]驱动[..],无需下载或导入、驱动不支持跨大版本升(降)级,请删除已有驱动后重试
Version.ini 关键字段:
| 字段 | 说明 |
|---|---|
platform | 与设备平台比对,all 直接放行 |
type | system 走系统服务上传;upload 与 das 都归类为驱动上传(响应中的 type 被强制写成 das) |
version | 与设备已装驱动比对;同版本提示「无需下载或导入」;主版本不同提示「不支持跨大版本升(降)级」 |
【警告】只有
/api/mlinkClient/system/driver/upload/{DeviceCode}是可用路径。/api/mlinkClient/config/driver/upload/{DeviceCode}未注册(请求结构体存在但无处理器)。若调用后者会 404。
4.7.2 驱动列表
- 方法与路径:
POST /api/mlinkClient/config/driver/list/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
filter.type | string | 否 | 驱动类型 |
filter.name | string | 否 | 驱动名 |
filter.desc | string | 否 | 描述 |
limit.limit | int | 否 | 每页数量 |
limit.page | int | 否 | 页码 |
limit.order | string | 否 | 排序字段 |
limit.dir | string | 否 | 排序方向 |
- 响应:
{"count":1,"drivers":[{"name":"...","version":"...","upload_time":"...","interface":"...","type":"das","desc":"..."}]} - 相关错误码:通用(
200/-1/51)
4.7.3 驱动动态表单
- 方法与路径:
GET /api/mlinkClient/config/driver/conf/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 是 | query 参数,驱动名 |
type | string | 否 | query 参数,传 system 表示查询系统服务表单 |
- 响应:原始 JSON 文本(驱动表单定义,其中的字段名即
para的 key) - 失败响应:
驱动不存在;type=system时查不到返回系统服务不存在 - 相关错误码:
-1、51、「驱动不存在」、「系统服务不存在」
【注意】这是二次开发必调的接口:只有拿到动态表单,才知道
para里应该填哪些字段。
4.7.4 驱动删除
- 方法与路径:
DELETE /api/mlinkClient/config/driver/delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
driver | string | 是 | query 参数,驱动名 |
- 响应:
{"name":"...","err":{"code":200,"msg":"ok"}};失败时 HTTP 500 +PopupWindow - 相关错误码:
-1、500、51
4.7.5 驱动 SR 枚举
- 方法与路径:
GET /api/mlinkClient/config/driver/sr/sn/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
app | string | 是 | query 参数,服务名 |
- 响应:
{"sr":{"KEY":"显示名", ...}}(采集点类型枚举,与具体驱动相关) - 相关错误码:
-1、51
【注意】测点的
sr字段取值必须来自该接口,不要硬编码。
4.7.6 驱动框架版本
- 方法与路径:
GET /api/mlinkClient/config/driver/framework/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
driver | string | 是 | query 参数,驱动名 |
- 响应:
{"Protocol":"...","Version":"..."} - 相关错误码:
-1、51
4.7.7 拉取在线应用
- 方法与路径:
POST /api/mlinkClient/config/app/online/pull/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"total":1,"apps":[...]} - 相关错误码:
-1、「应用下载信息获取失败」
4.7.8 查询在线应用
- 方法与路径:
POST /api/mlinkClient/config/app/online/list/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
filter.type | string | 否 | 应用类型 |
filter.name | string | 否 | 应用名 |
filter.desc | string | 否 | 描述 |
limit.limit | int | 否 | 每页数量 |
limit.page | int | 否 | 页码 |
- 响应:
{"code":200,"msg":"ok","data":{"count":1,"drivers":[...]}} - 相关错误码:
-1、51
4.7.9 删除在线应用
- 方法与路径:
DELETE /api/mlinkClient/config/app/online/delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
appId | string | 是 | 应用 ID |
appName | string | 是 | 应用名 |
- 响应:
{"code":200,"msg":"ok","data":{}} - 相关错误码:
-1、51
4.7.10 应用下载状态判定
- 方法与路径:
GET /api/mlinkClient/config/app/download/status/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
appId | string | 是 | query 参数,应用 ID |
- 响应:
{"download":true} - 相关错误码:
-1、51
4.7.11 应用市场:应用列表
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/app-list/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | 应用类型 |
mainGroupName | string | 否 | 主分组名 |
groupName | string | 否 | 分组名 |
keyword | string | 否 | 关键字 |
page | int | 否 | 页码 |
limit | int | 否 | 每页数量 |
- 响应:
{"code":200,"msg":"ok","count":1,"data":[{"appName":"...","version":"...","type":"...","download":true,"update":false,"delete":false}]} - 相关错误码:
-1、「未找到应用列表接口」、「访问应用列表接口失败」
4.7.12 应用市场:应用分组树
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/group-tree/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | 应用类型 |
- 响应:
{"code":200,"msg":"ok","data":{...}} - 相关错误码:
-1、51
4.7.13 应用市场:刷新应用列表
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/app-list-update/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:空响应
- 相关错误码:
-1、51
4.7.14 应用市场:应用详情
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/app-detail/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | 应用类型 |
appName | string | 是 | 应用名 |
- 响应:应用对象
- 相关错误码:
-1、51
4.7.15 应用市场:应用下载链接
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/app-download-link/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
appName | string | 是 | 应用名 |
platform | string | 是 | 目标平台 |
dasVersion | string | 是 | DASS 版本 |
versionNo | string | 是 | 应用版本号 |
- 响应:
{"url":"...","outUrl":"...","md5":"...","fileName":"..."} - 相关错误码:
-1、51
4.7.16 应用市场:应用下载并导入
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/app-download/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
link | string | 是 | 下载链接(取自 4.7.15) |
md5 | string | 是 | 包 MD5 校验值 |
fileName | string | 是 | 包文件名 |
type | string | 是 | 取值 das、upload、edge |
appName | string | 是 | 应用名 |
- 响应:
{"code":...,"name":"...","type":"...","msg":"..."} - 相关错误码:
-1、51
4.7.17 应用市场:应用删除
- 方法与路径:
POST /api/mlinkClient/config/driver/app-gallery/app-delete/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | 应用类型 |
appName | string | 是 | 应用名 |
- 响应:空响应(
response.Ok) - 相关错误码:
-1、51
【警告】应用删除在控制器层不做「被引用」校验,删除前请人工确认该应用没有被服务使用。
4.7.18 未注册的路径
| 路径 | 状态 |
|---|---|
POST /api/mlinkClient/config/driver/upload/{DeviceCode} | 未注册,请改用 4.7.1 的 system 组路径 |
4.8 实时库与数据查询
4.8.1 实时库测点查询
- 方法与路径:
POST /api/mlinkClient/config/data/point/list/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit.page | int | 否 | 页码 |
limit.limit | int | 否 | 每页数量 |
limit.order | string | 否 | 排序字段 |
limit.sort | string | 否 | 排序方向 |
filter.node | string | 否 | 实时库节点 |
filter.keyword | string | 否 | 关键字 |
filter.ID | string | 否 | 测点 ID |
filter.DS | string | 否 | 数据状态 |
- 响应:
{"count":1,"points":[{"pn":"...","gn":"...","ed":"...","rt":"...","sr":"...","ad":"...","ae":"...","flag":"...","an":"...","id":"...","kt":"...","ex":"...","db":"...","dt":"...","kz":"..."}]} - 相关错误码:
-1、51
4.8.2 实时库节点树
- 方法与路径:
GET /api/mlinkClient/config/data/node/list/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"Tree":[...]} - 相关错误码:
-1、51
4.8.3 设备基础信息(含授权点数)
- 方法与路径:
GET /api/mlinkClient/monitor/base/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
box_name、version、hard_version、mirror_version、dev_code、sn、expire、license_point、used_point、platform、max_service_number、max_point_number - 相关错误码:
-1、NonexistentData、HostIsDown
【注意】
license_point与used_point是授权容量的判据:大批量建测点前应先核对余量,否则会中途失败。
4.8.4 首页基础信息
- 方法与路径:
GET /api/mlinkClient/monitor/info/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:设备运行时基础信息(网络、内存、磁盘等)
- 相关错误码:
-1、HostIsDown
4.8.5 监控概览:异常事件列表
- 方法与路径:
POST /api/mlinkClient/monitor/unusualEvent/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:事件数组,字段为
event_level、event_code、event_name、content、timestamp - 相关错误码:
-1、HostIsDown
4.8.6 监控概览:服务概览
- 方法与路径:
GET /api/mlinkClient/monitor/unusualService/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:
{"code":200,"msg":"ok","data":{"list":[...],"total":0}} - 相关错误码:
-1、HostIsDown
4.8.7 监控概览:通道概览
- 方法与路径:
GET /api/mlinkClient/monitor/unusualChannel/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:结构同 4.8.6
- 相关错误码:
-1、HostIsDown
4.8.8 监控概览:测点概览
- 方法与路径:
GET /api/mlinkClient/monitor/unusualPoint/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:结构同 4.8.6
- 相关错误码:
-1、HostIsDown
4.8.9 网口流量
- 方法与路径:
GET /api/mlinkClient/monitor/flowInfo/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:网口流量信息
- 相关错误码:
-1、HostIsDown
4.8.10 授权 / 服务信息
- 方法与路径:
GET /api/mlinkClient/monitor/license/service/info/{DeviceCode} - 权限:需 token
- 请求字段:无
- 响应:授权与服务信息
- 相关错误码:
-1、HostIsDown
4.8.11 WebSocket 实时推送
| 功能 | 方法与路径 | 说明 |
|---|---|---|
| 服务树实时推送 | GET /api/mlinkClient/websocket/servicetree/tree/{DeviceCode}?token=<token> | 帧格式 {"type":"snapshot" 或 "diff" 或 "error","data":...} |
| 实时日志 | GET /api/mlinkClient/websocket/log/realtime/{DeviceCode}?token=<token> | 日志帧 |
| 监控异常事件 | GET /api/mlinkClient/websocket/monitor/unusualEvent/{DeviceCode}?token=<token> | 事件帧 |
| 应用下载流 | GET /api/mlinkClient/websocket/app/download/{DeviceCode}?token=<token> | 流 |
- 鉴权:WebSocket 无法设置请求头,token 只能放 query 参数
【注意】服务树推送的
snapshot帧适合做首次全量对齐,diff帧适合做增量维护。收到error帧应重连并重新拉取一次快照。
4.8.12 已注册 STOMP topic
- 方法与路径:
GET /api/mlinkClient/topics/get - 权限:免认证(白名单)
- 请求字段:无
- 响应:已注册 topic 列表
- 相关错误码:通用(
200/-1/51)
4.8.13 STOMP 端点
- 方法与路径:
/api/mlinkClient/stomp/*(全部方法) - 权限:需 token(挂 Ctx 与 Auth 中间件)
- 响应:STOMP 帧协议
- 相关错误码:同 STOMP 协议
4.8.14 动态表单远程调用
- 方法与路径:
POST /api/mlinkClient/remote/dataSource/{DeviceCode} - 权限:需 token
- 请求字段:驱动动态表单定义的远程数据源参数
- 响应:驱动动态表单所需的远程数据
- 相关错误码:
-1、51
4.8.15 Ping 调试
- 方法与路径:
POST /api/mlinkClient/debugger/ping/{DeviceCode} - 权限:需 token
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
host | string | 是 | 待 Ping 的主机地址或域名 |
- 响应:
data为字符串数组(Ping 输出行) - 相关错误码:
-1、51
帮助中心