跳到主要内容

REST API 参考

NeoMind 后端用 Axum 提供 REST API。本文给出面向集成商的 API 总览:base URL、认证、统一响应格式、各业务域端点分组。完整交互式文档见 Swagger UI。

入口

Base URLhttp://<SERVER_IP>:9375/api
Swagger UI(交互式文档)http://<SERVER_IP>:9375/api/docs
默认端口9375(可用 --port / PORT 环境变量改)

所有端点路径以 /api 开头。下文的端点列表都省略 /api 前缀。

认证

两种鉴权方式:

1. JWT(用户会话)

Web UI 默认走这套:

POST /api/auth/login    { "username": "...", "password": "..." }
→ 返回 JWT
之后所有请求加 Header:
Authorization: Bearer <jwt>

2. API Key(编程访问)

适合脚本 / 第三方集成:

  • Settings → API Keys 生成一个 Key
  • 请求时加 Header:
X-API-Key: <key>

API Key 不依赖用户会话,可设过期时间与权限范围。

公开端点(无需认证)

少数端点无需鉴权:

  • /api/health / /health/status / /health/live / /health/ready
  • /api/system/network-info
  • /api/auth/status / /auth/verify
  • /api/auth/login / /auth/register
  • /api/setup/*(首次配置向导)
  • /api/llm-backends/types(列出后端类型)
  • /api/messages/channels/types
  • /api/extensions(列出扩展)
  • /api/capabilities / /capabilities/:name
  • /api/tools

统一响应格式

成功

{
"success": true,
"data": { /* 业务数据 */ },
"meta": { /* 可选:分页 / 计数 / 时间戳 */ }
}

CLI / 编程集成提醒:CLI 包一层 data,集成商从 data.data 取真实业务对象。

失败

{
"success": false,
"error": {
"code": "DEVICE_NOT_FOUND",
"message": "Device with id 'xxx' not found"
}
}

HTTP 状态码遵循惯例:4xx 客户端错误、5xx 服务端错误。从 error.message 提取可读信息。

字段命名约定

重要陷阱:后端返回 snake_case(如 data_source),前端使用 camelCase(如 dataSource)。前端所有 API 响应都经 web/src/store/persistence/types.ts::fromDashboardDTO() 转换。集成商自己解析 JSON 时,字段以后端原样 snake_case 为准。

主要端点分组

Auth(认证)

方法路径说明
POST/auth/login登录拿 JWT
POST/auth/register注册(首个用户自动 admin)
GET/auth/status当前认证状态
GET/auth/verify验证 JWT 是否有效

Devices(设备)

方法路径说明
GET/devices列出设备
POST/devices创建设备(需 connection_config: {} 即使为空)
GET/devices/:id设备详情(含 metrics + commands)
PUT/devices/:id更新设备
DELETE/devices/:id删除设备
GET/devices/:id/history遥测历史(?metric=&time_range=
POST/devices/:id/control下发指令({"command": "...", "params": {...}}
POST/devices/:id/webhookWebhook 推数据(无需认证)
GET/devices/types列出设备类型
POST/devices/types创建设备类型
GET/devices/drafts待审批草稿(自动发现)
POST/devices/drafts/:id/approve审批草稿

Dashboards(仪表板)

方法路径说明
GET/dashboards列出仪表板
POST/dashboards创建仪表板
GET/dashboards/:id仪表板详情
PUT/dashboards/:id更新仪表板(含布局)
DELETE/dashboards/:id删除仪表板
POST/dashboards/:id/share生成分享链接(带过期)
GET/dashboards/shared/:token访问分享(无需认证)

Rules(规则)

方法路径说明
GET/rules列出规则
POST/rules创建规则 — JSON body(name / trigger / condition / actions)
GET/rules/:id规则详情
PUT/rules/:id更新规则
DELETE/rules/:id删除规则
POST/rules/:id/test试跑规则(不实际触发动作)

规则用 JSON 格式(不是 DSL 字符串)。POST body 示例:

{
"name": "高温告警",
"trigger": { "trigger_type": "data_change" },
"condition": { "condition_type": "comparison", "source": "device:sensor-01:temperature", "operator": "greater_than", "threshold": 30 },
"actions": [ { "type": "notify", "message": "温度过高" } ]
}

条件类型:comparison / range / logical。动作类型:notify / execute / trigger_agent。触发类型:data_change / schedule / manual

Agents(AI 智能体)

方法路径说明
GET/agents列出 Agent
POST/agents创建 Agent
GET/agents/:idAgent 详情
PUT/agents/:id更新 Agent
DELETE/agents/:id删除 Agent
POST/agents/:id/status控制运行(body {"status": "active"} / "paused"
GET/agents/:id/executions执行历史

创建 Agent 必填字段user_prompt(必填)、schedule: {"schedule_type": "..."}(必填)。无资源绑定时需 execution_mode: "free"

LLM Backends(LLM 后端)

方法路径说明
GET/llm-backends列出后端
POST/llm-backends添加后端(Ollama / OpenAI / Anthropic / ...)
GET/llm-backends/:id后端详情(含能力探测结果)
PUT/llm-backends/:id更新后端
DELETE/llm-backends/:id删除后端
PATCH/llm-backends/:id/capabilities手动覆盖能力(body {"multimodal": true} / false / null,null 清除覆盖)

Messages(消息通知)

方法路径说明
GET/messages消息列表
GET/messages/channels列出通知渠道
POST/messages/channels添加渠道(webhook/email/telegram/wecom/dingtalk/slack/feishu)
PUT/messages/channels/:id更新渠道
DELETE/messages/channels/:id删除渠道
POST/messages/channels/:id/test测试渠道投递
POST/messages/send手动发消息

Extensions(扩展)

方法路径说明
GET/extensions列出已装扩展
GET/extensions/types扩展类型枚举
POST/extensions/discover扫描扩展目录
GET/extensions/:id扩展详情
GET/extensions/:id/health健康检查
GET/extensions/:id/commands扩展命令列表
POST/extensions/:id/commands/:cmd执行扩展命令
GET/extensions/:id/components扩展提供的 Dashboard 组件

Data Push(数据推送)

方法路径说明
GET/data-push列出推送目标
POST/data-push创建推送目标(Webhook 或 MQTT)
GET/data-push/:id详情
PUT/data-push/:id更新
DELETE/data-push/:id删除
POST/data-push/:id/test试推一次
POST/data-push/:id/start启动
POST/data-push/:id/stop停止
GET/data-push/:id/logs投递日志

Storage & System

方法路径说明
GET/settings/*系统设置(保留策略等)
GET/system/info系统信息(MQTT / 网络 / webhook)
GET/system/network-info网络信息

实时 API

除 REST 外,NeoMind 提供:

  • WebSocketws://<host>:9375/api/events — 仪表板实时数据流、设备状态变化推送
  • SSEGET /api/events(Server-Sent Events)— 同样的事件流,HTTP 单向
  • MQTT:直连 mqtt://<host>:1883 订阅设备原始 topic

实时协议(WebSocket / SSE)的权威实现参考 Web 前端 web/src/lib/events.tsweb/src/lib/websocket.ts

错误处理建议

import requests

resp = requests.post(
"http://host:9375/api/devices",
json={"name": "sensor", "device_type": "temp", "connection_config": {}},
headers={"X-API-Key": KEY},
)
data = resp.json()
if not data.get("success"):
err = data["error"]
print(f"[{err['code']}] {err['message']}")
else:
device = data["data"]

下一步

  • 完整交互式文档/api/docs(Swagger)——所有端点 + 参数 schema + 在线试调用
  • 加新端点 → 在 crates/neomind-api/src/ 加 handler,遵循现有分模块模式
  • 实时推送 → WebSocket / SSE(参考 web/src/lib/websocket.ts

最后更新: 2026-06-15