乐于分享
好东西不私藏

FUXA Web API 测试文档 [20260212]

FUXA Web API 测试文档 [20260212]

概述

本文档记录了 FUXA 服务器的 Web API 测试结果,使用 API Key 进行认证。

服务器地址http://127.0.0.1:1881
API KeyawnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ
API 版本1.0.0


认证方式

API Key 认证

在请求头中添加 x-api-key

curl -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ" http://127.0.0.1:1881/api/endpoint

JWT Token 认证

在请求头中添加 x-access-token

curl -H "x-access-token: YOUR_JWT_TOKEN" http://127.0.0.1:1881/api/endpoint

API 测试结果

1. 系统相关 API

1.1 获取 API 版本

端点GET /api/version

请求:

curl -X GET "http://127.0.0.1:1881/api/version" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

"1.0.0"

状态: ✅ 成功


1.2 获取服务器设置

端点GET /api/settings

请求:

curl -X GET "http://127.0.0.1:1881/api/settings" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

{
"version":1.4,
"language":"zh-cn",
"uiPort":1881,
"logDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_logs",
"logApiLevel":"tiny",
"dbDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_db",
"daqEnabled":true,
"daqTokenizer":24,
"logs":{
"retention":"year1"
},
"broadcastAll":false,
"allowedOrigins":[
"http://localhost",
"http://127.0.0.1",
"http://192.168.*",
"http://10.*",
"http://localhost:4200"
],
"heartbeatIntervalSec":10,
"webcamSnapShotsDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_webcam_snapshots",
"webcamSnapShotsCleanup":false,
"webcamSnapShotsRetain":7,
"swaggerEnabled":true,
"nodeRedEnabled":true,
"appName":"FUXA",
"workDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_appdata",
"appDir":"D:\\FUXA\\PROv1.2.11-2666\\server",
"packageDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_pkg",
"settingsFile":"D:\\FUXA\\PROv1.2.11-2666\\server\\_appdata\\settings.js",
"environment":"prod",
"uploadFileDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_appdata\\_upload_files",
"imagesFileDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_images",
"widgetsFileDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_widgets",
"reportsDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_reports",
"resourcesFileDir":"D:\\FUXA\\PROv1.2.11-2666\\server\\_resources",
"logFileName":"fuxa-log",
"serverName":"FUXA Server",
"reportHeaderText":"Report created from FUXA",
"userSettingsFile":"D:\\FUXA\\PROv1.2.11-2666\\server\\_appdata\\mysettings.json",
"secureEnabled":false,
"tokenExpiresIn":"1h",
"smtp":{
"host":"",
"port":587,
"mailsender":"",
"username":"",
"subject":""
},
"daqstore":{
"type":"SQlite",
"retention":"year1"
},
"alarms":{
"retention":"year1"
},
"logFull":false,
"nodeRedAuthMode":"legacy-open",
"httpUploadFileStatic":"resources",
"httpStatic":"D:\\FUXA\\PROv1.2.11-2666\\client\\dist",
"uiHost":"0.0.0.0",
"serverPort":1881
}

状态: ✅ 成功


2. 项目相关 API

2.1 获取项目信息

端点GET /api/project

请求:

curl -X GET "http://127.0.0.1:1881/api/project" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

{
"devices":[],
"tags":[],
"alarms":[],
"views":[],
"layout":{
"autoresize":false,
"start":"v_0712346b1-12b1210",
"navigation":{
"mode":"over",
"type":"block",
"bkcolor":"#F4F5F7",
"fgcolor":"#1D1D1D",
"items":[],
"logo":false
},
"header":{
"bkcolor":"#ffffff",
"fgcolor":"#000000",
"fontSize":13,
"itemsAnchor":"left"
},
"showdev":true,
"inputdialog":"false",
"hidenavigation":false,
"theme":"",
"loginonstart":false,
"loginoverlaycolor":"none",
"show_connection_error":true,
"customStyles":""
},
"version":"1.00",
"projectFile":"C:\\Users\\Meimetis\\AppData\\Roaming\\.fuxa\\project.json",
"charts":[
{
"id":"0a254398-513213",
"name":"My chart",
"lines":[
{
"id":"Tag Byte",
"name":"Tag Byte",
"device":"Device A",
"color":"#4484ef",
"label":"Tag Byte",
"yaxis":1
}
]
}
],
"viewTree":[],
"viewtree":[],
"server":{
"id":"0",
"name":"FuxaServer",
"type":"FuxaServer",
"property":{
"address":"0.0.0.0"
}
}
}

状态: ✅ 成功


2.2 获取演示项目

端点GET /api/projectdemo

请求:

curl -X GET "http://127.0.0.1:1881/api/projectdemo" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

<!DOCTYPE html>
<htmllang="en">
<head>
<metacharset="utf-8">
<title>Error</title>
</head>
<body>
<pre>SyntaxError: Unexpected token &#39;&#39;&quot;{&quot;devices&quot;... is not valid JSON<br>
</pre>
</body>
</html>

状态: ❌ 失败 – JSON 解析错误


3. 用户管理 API

3.1 获取用户列表

端点GET /api/users

请求:

curl -X GET "http://127.0.0.1:1881/api/users" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[
{
"username":"admin",
"fullname":"Administrator Account",
"password":"$2a$10$nWAdb1o5o1o.HuKWGlnP2.Y8KcI/HT1uWoyqDuCun0gm0bixx1Gye",
"groups":-1,
"info":null
}
]

状态: ✅ 成功


3.2 获取角色列表

端点GET /api/roles

请求:

curl -X GET "http://127.0.0.1:1881/api/roles" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[]

状态: ✅ 成功(无角色数据)


4. 报警管理 API

4.1 获取当前报警

端点GET /api/alarms

请求:

curl -X GET "http://127.0.0.1:1881/api/alarms" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[]

状态: ✅ 成功(无报警)


4.2 获取报警历史

端点GET /api/alarmsHistory

请求:

curl -X GET "http://127.0.0.1:1881/api/alarmsHistory" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[]

状态: ✅ 成功(无历史记录)


5. 插件管理 API

5.1 获取插件列表

端点GET /api/plugins

请求:

curl -X GET "http://127.0.0.1:1881/api/plugins" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[
{
"name":"node-opcua",
"module":"./opcua",
"type":"OPCUA",
"version":"2.78.0",
"current":"2.149.0",
"pkg":false,
"group":"connection-device"
},
{
"name":"modbus-serial",
"module":"./modbus",
"type":"Modbus",
"version":"8.0.9",
"current":"8.0.19",
"pkg":false,
"group":"connection-device"
},
{
"name":"node-bacnet",
"module":"./bacnet",
"type":"BACnet",
"version":"0.2.4",
"current":"0.2.4",
"pkg":false,
"group":"connection-device"
},
{
"name":"node-snap7",
"module":"./s7",
"type":"SiemensS7",
"version":"1.0.7",
"current":"1.0.7",
"pkg":false,
"group":"connection-device"
},
{
"name":"ads-client",
"module":"./ads-client",
"type":"ADSclient",
"version":"2.1.0",
"current":"2.1.0",
"pkg":false,
"group":"connection-device"
},
{
"name":"nodepccc",
"module":"./ethernetip",
"type":"EthernetIP",
"version":"0.1.17",
"current":"0.1.17",
"pkg":true,
"group":"connection-device",
"dinamic":true
},
{
"name":"odbc",
"module":"./odbc",
"type":"ODBC",
"version":"2.4.8",
"current":"2.4.9",
"pkg":false,
"group":"connection-database"
},
{
"name":"chart.js",
"module":"./chartjs",
"type":"Chart",
"version":"2.9.4",
"current":"",
"pkg":false,
"group":"chart-report"
},
{
"name":"chartjs-node-canvas",
"module":"chartjs-canvas",
"type":"Chart",
"version":"3.2.0",
"current":"",
"pkg":false,
"group":"chart-report"
},
{
"name":"onoff",
"module":"./onoff",
"type":"GPIO",
"version":"6.0.3",
"current":"",
"pkg":false,
"group":"connection-device"
},
{
"name":"node-webcam",
"module":"./node-webcam",
"type":"WebCam",
"version":"0.8.2",
"current":"0.8.2",
"pkg":true,
"group":"connection-device",
"dinamic":true
},
{
"name":"mcprotocol",
"module":"./mcprotocol",
"type":"MELSEC",
"version":"0.1.2",
"current":"0.1.2",
"pkg":true,
"group":"connection-device",
"dinamic":true
},
{
"name":"node-red",
"module":"./node-red",
"type":"node-red",
"version":"4.1.0",
"current":"4.1.5",
"pkg":false,
"group":"service"
},
{
"name":"redis",
"module":"./redis",
"type":"REDIS",
"version":"5.8.2",
"current":"5.8.2",
"pkg":true,
"group":"connection-device",
"dinamic":true
}
]

状态: ✅ 成功


6. 资源管理 API

6.1 获取图片资源

端点GET /api/resources/images

请求:

curl -X GET "http://127.0.0.1:1881/api/resources/images" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

{
"groups":[
{
"name":"Agriculture",
"items":[
{"path":"_images/Agriculture/barn.svg","name":"barn.svg"},
{"path":"_images/Agriculture/corn.svg","name":"corn.svg"},
{"path":"_images/Agriculture/crateoffruit.svg","name":"crateoffruit.svg"},
{"path":"_images/Agriculture/farmscene.svg","name":"farmscene.svg"},
{"path":"_images/Agriculture/irrigators.svg","name":"irrigators.svg"},
{"path":"_images/Agriculture/rice.svg","name":"rice.svg"},
{"path":"_images/Agriculture/silo.svg","name":"silo.svg"},
{"path":"_images/Agriculture/tractor.svg","name":"tractor.svg"},
{"path":"_images/Agriculture/wheat.svg","name":"wheat.svg"},
{"path":"_images/Agriculture/wheat2.svg","name":"wheat2.svg"}
]
},
{
"name":"Valve",
"items":[
{"path":"_images/Valve/checkvalve_closed.svg","name":"checkvalve_closed.svg"},
{"path":"_images/Valve/checkvalve_open.svg","name":"checkvalve_open.svg"},
{"path":"_images/Valve/solenoidvalve.svg","name":"solenoidvalve.svg"},
{"path":"_images/Valve/valve.svg","name":"valve.svg"},
{"path":"_images/Valve/valvesymbol.svg","name":"valvesymbol.svg"},
{"path":"_images/Valve/valve_1path_left.svg","name":"valve_1path_left.svg"},
{"path":"_images/Valve/valve_2.svg","name":"valve_2.svg"},
{"path":"_images/Valve/valve_3d_3way1.svg","name":"valve_3d_3way1.svg"}
]
}
]
}

状态: ✅ 成功


6.2 获取模板列表

端点GET /api/resources/templates

请求:

curl -X GET "http://127.0.0.1:1881/api/resources/templates" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[
{
"name":"mdbus",
"type":"device",
"content":"{\"id\":\"d_d2ac34d8-b9794a15\",\"name\":\"mdbus\",\"enabled\":true,\"property\":{\"address\":\"COM10\",\"port\":null,\"slot\":null,\"rack\":null,\"slaveid\":\"1\",\"baudrate\":9600,\"databits\":8,\"stopbits\":1,\"parity\":\"None\",\"connectionOption\":\"SerialPort\",\"delay\":10,\"socketReuse\":null,\"forceFC16\":false},\"type\":\"ModbusRTU\",\"polling\":700,\"tags\":{}}"
}
]

状态: ✅ 成功


6.3 获取组件列表

端点GET /api/resources/widgets

请求:

curl -X GET "http://127.0.0.1:1881/api/resources/widgets" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

{
"groups":[
{
"name":"Basic",
"items":[
{"path":"_widgets/Basic/20_Cone.svg","name":"20_Cone.svg"}
]
},
{
"name":"Control-Gauges",
"items":[]
},
{
"name":"Tanks",
"items":[
{"path":"_widgets/Tanks/circularTankLevel-v1.svg","name":"circularTankLevel-v1.svg"},
{"path":"_widgets/Tanks/squareTankLevel-v1.svg","name":"squareTankLevel-v1.svg"}
]
}
]
}

状态: ✅ 成功


7. API Key 管理 API

7.1 获取 API Key 列表

端点GET /api/apikeys

请求:

curl -X GET "http://127.0.0.1:1881/api/apikeys" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[
{
"id":"ak_451a4497-10783",
"name":"test",
"key":"awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ",
"description":"",
"created":"2026-02-12T00:00:00.000Z",
"expires":"2027-02-12T00:00:00.000Z",
"enabled":true
}
]

状态: ✅ 成功


8. 诊断 API

8.1 获取日志文件列表

端点GET /api/logsdir

请求:

curl -X GET "http://127.0.0.1:1881/api/logsdir" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"

响应:

[
"api.log",
"fuxa-log-err.log",
"fuxa-log.log",
"tcscada-log-err.log",
"tcscada-log.log"
]

状态: ✅ 成功


测试总结

API 类别
端点
方法
状态
说明
System
/api/version
GET
✅ 成功
返回 API 版本
System
/api/settings
GET
✅ 成功
返回服务器设置
Project
/api/project
GET
✅ 成功
返回项目信息
Project
/api/projectdemo
GET
❌ 失败
JSON 解析错误
Users
/api/users
GET
✅ 成功
返回用户列表
Users
/api/roles
GET
✅ 成功
返回角色列表
Alarms
/api/alarms
GET
✅ 成功
返回当前报警
Alarms
/api/alarmsHistory
GET
✅ 成功
返回报警历史
Plugins
/api/plugins
GET
✅ 成功
返回插件列表
Resources
/api/resources/images
GET
✅ 成功
返回图片资源
Resources
/api/resources/templates
GET
✅ 成功
返回模板列表
Resources
/api/resources/widgets
GET
✅ 成功
返回组件列表
ApiKeys
/api/apikeys
GET
✅ 成功
返回 API Key 列表
Diagnose
/api/logsdir
GET
✅ 成功
返回日志文件列表

成功率: 13/14 (92.9%)


支持的设备插件

根据插件列表,FUXA 支持以下设备连接:

  1. OPCUA
     – OPC UA 通信
  2. Modbus
     – Modbus RTU/TCP 通信
  3. BACnet
     – BACnet 协议
  4. SiemensS7
     – 西门子 S7 协议
  5. ADSclient
     – Beckhoff ADS 协议
  6. EthernetIP
     – Allen-Bradley Ethernet/IP
  7. ODBC
     – ODBC 数据库连接
  8. GPIO
     – Raspberry Pi GPIO
  9. WebCam
     – 网络摄像头
  10. MELSEC
     – 三菱 MELSEC 协议
  11. REDIS
     – Redis 数据库
  12. node-red
     – Node-RED 集成

注意事项

  1. API Key 有效期
    : 测试使用的 API Key 有效期至 2027-02-12
  2. 认证方式
    : 支持 API Key 和 JWT Token 两种认证方式
  3. 错误处理
    : 失败的 API 返回 HTML 格式的错误信息
  4. 数据格式
    : 所有成功的 API 响应均为 JSON 格式
  5. 安全设置
    : 当前 secureEnabled: false,生产环境建议启用认证
  6. Swagger 文档
    : 可通过 http://127.0.0.1:1881/api-docs 访问交互式 API 文档

常见问题

Q: 如何获取新的 API Key?

A: 需要通过 FUXA Web 界面的用户管理功能创建新的 API Key。

Q: API Key 失效后如何处理?

A: 需要联系管理员重新生成或更新 API Key。

Q: 如何处理 JSON 解析错误?

A: 检查请求参数格式是否正确,确保 JSON 格式符合规范。

Q: 支持哪些 HTTP 方法?

A: 主要支持 GET、POST、DELETE 方法,具体取决于 API 端点。


更新记录

  • 2026-02-12
    : 初始版本,完成主要 API 端点测试

技术支持

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » FUXA Web API 测试文档 [20260212]

评论 抢沙发

8 + 1 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮