RESTful API Reference
Platform API 是 NE503 的 HTTP 网关,基于 Go + Gin 框架构建,代理所有后端 gRPC 服务,支持 WebSocket 实时通信(事件流、视频流、终端、容器日志)。技术栈:Go + Gin + gRPC Client + SQLite (GORM)。
请求处理流程:客户端发送 HTTP 请求 → CORS 处理 → 日志记录 → 认证校验 → 路由匹配 → 参数校验 → 权限检查 → 业务逻辑(通过 gRPC 连接池调用后端服务) → 响应包装。网关处理延迟约 1-5ms,后端服务处理约 10-50ms。
1. 概述
Platform API 是 NE503 的 HTTP 网关,基于 Go + Gin 框架构建,统一代理所有后端 gRPC 服务(AI Runtime、Event Bus、Device Control、App Manager 等),并支持 WebSocket 实时通信(事件流、视频流、容器日志、Web 终端)。
| 项目 | 说明 |
|---|---|
| 端点前缀 | /api/v1 |
| 基础地址 | http://<设备IP>:8080 |
| Swagger UI | /swagger/(交互式文档,可直接试调) |
| OpenAPI 规格 | /api/v1/swagger.yaml |
| 协议 | HTTP + WebSocket |
| 响应格式 | JSON |
以下各节路径均省略
/api/v1前缀,实际请 求时需拼接完整路径,如/api/v1/system/info。登录端点/api/login是例外,独立于该前缀。
2. 认证
Platform API 默认启用认证。除公开端点外,所有请求必须携带有效 Token,否则返回 401。
登录获取 Token:
# 登录端点独立于 /api/v1 前缀
curl -X POST http://<设备IP>:8080/api/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password"}'
// 响应
{"code":0,"message":"Success","data":{"token":"Bearer <token>","username":"admin"}}
出厂默认账号
admin/ 密码password,生产部署务必修改(通过POST /system/password或配置文件auth.username/auth.password)。返回的 Token 为静态 Bearer 密钥,直接作为后续请求的凭据。
Token 传递方式:
| 方式 | 格式 | 适用场景 |
|---|---|---|
| HTTP Header | Authorization: Bearer <token> | REST API 请求(推荐) |
| HTTP Header | X-API-Key: <token> | REST API 请求 |
| Query Parameter | ?token=<token> | WebSocket 连接(浏览器侧无法自定义 Header 时) |
公开端点(无需认证):
POST /api/login— 登录GET /system/health— 健康检查
注意:出厂默认即开启认证。第三方集成时必须先登录拿 Token,再带 Token 调用其余 端点。
3. 系统管理
系统管理接口负责设备登录鉴权、系统信息查询、固件升级(OTA)、时间与 NTP 配置等底层运维操作,主要面向集成方做设备纳管、健康监测与远程维护。
3.1 登录与系统信息
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /login | 提交用户名密码换取访问令牌(Token);真实地址为 POST /api/login(独立于 /api/v1 前缀),公开端点,无需鉴权 |
| GET | /system/health | 健康检查,公开端点,无需鉴权,常用于存活探测 |
| GET | /system/info | 获取设备系统信息(型号、版本、硬件等) |
| GET | /system/stats | 获取系统运行统计(CPU、内存、磁盘等资源占用) |
登录是调用其他受保护接口的前提:成功后返回的 Token 需以 Authorization: Bearer <token> 形式携带在后续请求头中。请求体为 JSON,包含 username 与 password 两个字段(均为必填)。
3.2 密码与重启
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /system/password | 修改后台登录密码 |
| POST | /system/restart | 触发设备系统重启 |
修改密码请求体为 JSON,需提供 old_password(旧密码,可选)与 new_password(新密码,必填)。/system/restart 无请求体,调用后设备将重启,期间服务短暂不可用,应做好重连重试。
3.3 固件升级(OTA)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /system/ota/detect | 检查是否存在新的 OTA 固件更新 |
| GET | /system/ota/status | 查询当前 OTA 升级进度与状态 |
| POST | /system/ota/install | 上传固件包并安装,multipart/form-data 字段名为 firmware |
| POST | /system/ota/parse | 仅解析固件文件信息,不执行安装,multipart/form-data 字段名为 firmware |
| POST | /system/ota/install-from-path | 从设备本地绝对路径安装固件(运维) |
升级典型流程:先 /system/ota/detect 检查更新或用 /system/ota/parse 校验本地固件包 → /system/ota/install 上传安装 → 轮询 /system/ota/status 跟踪进度。install-from-path 需请求体 { "path": "<设备上固件文件的绝对路径>" },适用于固件已预先下发到设备的运维场景,第三方集成一般用上传方式即可。
3.4 时间管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /system/time | 获取设备当前系统时间 |
| POST | /system/time/set | 手动设置系统时间 |
| GET | /system/time/config | 获取时间配置(NTP 是否启用、NTP 服务器等) |
| PUT | /system/time/timezone | 设置设备时区 |
| GET | /system/time/timezones | 列出设备支持的可选时区 |
| PUT | /system/time/ntp | 配置 NTP 设置(启用/关闭、服务器地址) |
| POST | /system/time/ntp/sync | 立即触发一次 NTP 时间同步 |
手动设置时间请求体为 { "datetime": "<RFC3339 时间戳>" },例如 2024-01-01T12:00:00Z。设置时区请求体为 { "timezone": "Asia/Shanghai" },可先通过 /system/time/timezones 取合法值。NTP 配置请求体为 { "enabled": true, "server": "ntp.aliyun.com" };启用 NTP 后可用 /system/time/ntp/sync 立即同步一次,避免等待下次定时同步。
4. AI 模型与推理
本组端点面向需要直接管理推理模型的开发者,用于在设备 AI 运行时中注册、上传、查询和卸载模型文件(.hef、.onnx、.bin、.tflite 等),并 获取运行时的整体统计信息;应用侧通常不直接调用,模型准备阶段会用到。
4.1 模型管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /ai/models | 列出所有已注册模型 |
| POST | /ai/models | 登记一个新模型(指向设备上已有的模型文件路径) |
| POST | /ai/models/upload | 上传模型文件并自动登记到运行时 |
| GET | /ai/models/{model_id} | 查询指定模型的详细信息 |
| DELETE | /ai/models/{model_id} | 卸载(取消登记)指定模型 |
| GET | /ai/models/{model_id}/apps | 查询当前正在使用该模型的应用列表 |
请求体要点:
POST /ai/models:JSON 体,必填model_path(模型文件在设备上的绝对路径,如/data/aipc/models/yolov8n.hef);可选项model_id用于自定义模型标识,不传则由系统生成。POST /ai/models/upload:multipart/form-data 上传,必填字段为model(模型文件本身,支持.hef、.onnx、.bin、.tflite);可选model_id、model_type(hef/onnx/tflite)、variant、threshold(检测阈值)、max_detections(最大检测数)等推理参数。适合模型文件尚未在设备上的场景。
4.2 运行时统计
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /ai/stats | 获取 AI 运行时的整体统计信息(已注册模型数、加载状态等) |
删除模型前建议先调用 GET /ai/models/{model_id}/apps 确认没有应用正在引用,避免影响在跑的推理任务。
5. 应用与容器管理
管理设备上运行的 AI 应用及其底层容器:安装、启停、查看日志与运行状态,以及拉取/删除容器镜像。面向需要远程部署或运维自有应用的三方集成方。
5.1 应用管理
应用由 app.yaml 清单描述,每个应用有唯一 app_id,底层对应一个或多个容器。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /apps | 列出所有已安装应用 |
| POST | /apps | 按 app.yaml 清单安装应用 |
| GET | /apps/{app_id} | 查看指定应用详情 |
| DELETE | /apps/{app_id} | 卸载指定应用,可用 keep_logs 保留日志 |
| POST | /apps/{app_id}/start | 启动指定应用 |
| POST | /apps/{app_id}/stop | 停止指定应用,可用 timeout 控制优 雅退出等待 |
| POST | /apps/{app_id}/restart | 重启指定应用 |
| GET | /apps/{app_id}/stats | 查看应用运行统计(CPU、内存等) |
| GET | /apps/{app_id}/logs | 查看应用日志,支持 max_lines 与 follow |
| GET | /apps/{app_id}/permissions | 查看应用被授予的权限 |
| POST | /apps/wizard | 通过向导快速安装应用(直接给 app_id/名称/镜像) |
| POST | /apps/upload-image | 上传容器镜像文件到设备 |
安装应用的两种入口区别:
POST /apps:已有完整app.yaml清单,请求体{ manifest_path, image_path? },manifest_path必填,image_path可选(离线安装本地镜像时使用)。POST /apps/wizard:无需提前写清单,请求体{ metadata: { id, name }, image, config? }(真机实际要求metadata.id/metadata.name+ 顶层image,与 spec 标注略有出入),config为应用自定义配置对象,适合三方系统快速推送一个应用。POST /apps/upload-image:multipart/form-data上传镜像文件,字段名file,用于设备无外网时离线导入镜像。
5.2 容器管理
直接操作底层容器(一般通过应用层间接管理,仅在排障或特殊场景使用)。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /containers | 列出容器,支持按 state、search 过滤及分页 |
| GET | /containers/{id} | 查看容器详情 |
| DELETE | /containers/{id} | 删除指定容器 |
| GET | /containers/{id}/stats | 查看容器资源占用 |
| GET | /containers/{id}/logs | 查看容器日志,tail 控制返回行数 |
| GET | /containers/{id}/logs/stream | 实时推送容器日志(SSE,text/event-stream) |
| POST | /containers/{id}/start | 启动容器 |
| POST | /containers/{id}/stop | 停止容器 |
| POST | /containers/{id}/restart | 重启容器 |
GET /containers 常用过滤参数:state 取值 running/stopped/all,search 按名称模糊匹配,page/page_size 分页(默认 1/20)。
5.3 容器镜像
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /images | 列出本地容器镜像 |
| POST | /images/pull | 从镜像仓库拉取镜像,请求体 { image } |
| DELETE | /images/{image} | 删除本地镜像 |