跳到主要内容

API 文档

适合谁需要把 RTKHUB 状态、控制能力或任务管理接入外部系统的开发者。
你会完成登录认证、读取状态、控制基线,并理解用户、任务和 Webhook 接口边界。
调用建议状态接口适合轮询,控制接口应记录原因并做权限和幂等保护。

RTKHUB 提供 REST API,便于把实时状态、基线控制、任务管理和告警能力接入外部系统。示例地址使用默认端口:

http://127.0.0.1:5426

调用约定

  • 认证方式:登录后使用 Cookie 会话。
  • 请求格式:控制类接口优先使用 JSON。
  • 响应格式:application/json
  • 字符集:UTF-8。
  • 权限:只读接口可授予 viewer,控制接口建议授予 operatoradmin

认证

POST /api/login

POST /api/login
Content-Type: application/x-www-form-urlencoded

username=admin&password=your_password

响应示例:

{
"success": true,
"message": "Login successful",
"user": {
"username": "admin",
"role": "admin"
}
}

POST /api/logout

退出当前会话。

POST /api/logout

状态查询

GET /api/status

获取所有测网和基线的实时状态。

{
"networks": [
{
"name": "XANet",
"channels": [
{
"id": 0,
"name": "DH04-DH06",
"running": true,
"state": 5,
"stateText": "FIX",
"ns": 12,
"ratio": 15.3,
"age": 1.2,
"e": 0.012,
"n": -0.008,
"u": 0.034
}
]
}
]
}

字段说明:

字段类型说明
runningboolean基线进程是否运行
statenumberRTK 状态码,常见值:0 无解、1 SINGLE、4 FLOAT、5 FIX
nsnumber当前使用卫星数
rationumber整周模糊度固定质量指标
agenumber差分数据龄期,单位秒
e/n/unumberENU 位移,单位米

GET /api/stat

获取卫星级统计信息,适合绘制天空图、残差图和卫星系统分布。

{
"channel": 0,
"satellites": [
{
"sat": "G01",
"sys": "GPS",
"az": 145.2,
"el": 35.8,
"fix": 2,
"resp": [0.12, -0.08],
"resc": [0.002, -0.001]
}
]
}

控制操作

POST /api/control

启动、停止或重启单条基线或整个测网。

{
"action": "restart",
"network": "XANet",
"channel": "DH04-DH06"
}

参数:

字段类型必填说明
actionstringstartstoprestart
networkstring测网名称
channelstring通道名称,省略时作用于整个测网

建议控制接口增加二次确认或操作日志,避免外部系统误触发批量重启。

用户管理 API

用户管理接口应仅对 admin 开放。

GET /api/users

获取用户列表。

{
"users": [
{
"id": 1,
"username": "admin",
"role": "admin",
"enabled": true,
"lastLogin": "2026-06-11T09:30:00+08:00"
}
]
}

POST /api/users

创建用户。

{
"username": "operator01",
"password": "change_me_first",
"role": "operator",
"enabled": true
}

PUT /api/users/:id

更新用户角色、状态或密码。

{
"role": "viewer",
"enabled": true
}

DELETE /api/users/:id

删除用户或停用用户。生产环境建议优先停用,保留审计记录。

SCRHUB API

GET /api/scrhub/tasks

获取脚本任务列表。

{
"tasks": [
{
"id": 12,
"name": "daily-backup",
"schedule": "0 2 * * *",
"enabled": true,
"lastStatus": "success"
}
]
}

POST /api/scrhub/execute

手动执行任务。

{
"taskId": 12,
"args": ["--days", "7"]
}

接口应返回执行 ID,调用方再查询任务日志或状态。

Webhook 通知

如果启用 Webhook,建议事件载荷保持稳定:

{
"event": "channel.state_changed",
"time": "2026-06-11T10:00:00+08:00",
"network": "XANet",
"channel": "DH04-DH06",
"level": "warning",
"message": "State changed from FIX to FLOAT"
}

建议事件类型:

事件说明
channel.started基线启动
channel.stopped基线停止
channel.state_changed解算状态变化
channel.age_high差分龄期过高
channel.ratio_lowRatio 低于阈值
task.finishedSCRHUB 任务完成
task.failedSCRHUB 任务失败

示例

Python

import requests

base_url = "http://127.0.0.1:5426"
session = requests.Session()

session.post(f"{base_url}/api/login", data={
"username": "admin",
"password": "password",
})

status = session.get(f"{base_url}/api/status")
print(status.json())

session.post(f"{base_url}/api/control", json={
"action": "start",
"network": "XANet",
"channel": "DH04-DH06",
})

JavaScript

const baseUrl = 'http://127.0.0.1:5426';

await fetch(`${baseUrl}/api/login`, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({
username: 'admin',
password: 'password',
}),
credentials: 'include',
});

const response = await fetch(`${baseUrl}/api/status`, {
credentials: 'include',
});

console.log(await response.json());

cURL

curl -c cookies.txt -d "username=admin&password=password" \
http://127.0.0.1:5426/api/login

curl -b cookies.txt http://127.0.0.1:5426/api/status

错误响应

{
"success": false,
"error": "unauthorized",
"message": "请先登录"
}
错误码HTTP 状态说明
invalid_params400参数错误
unauthorized401未登录或会话失效
forbidden403权限不足
not_found404资源不存在
conflict409当前状态不允许操作
too_many_requests429调用过于频繁
internal_error500服务内部错误

最佳实践

  • /api/status 轮询间隔建议不小于 1 秒。
  • 控制接口应做幂等处理:重复 start 已运行基线不应导致异常。
  • 自动化系统调用 restart 前应先读取当前状态并记录原因。
  • 外部系统不要依赖内部 SQLite 表结构,优先使用 API。
  • 网络异常时使用指数退避重试,避免对 Web 服务形成压力。

相关文档