
本文档记录了 FUXA 服务器的 Web API 测试结果,使用 API Key 进行认证。
服务器地址: http://127.0.0.1:1881
API Key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ
API 版本: 1.0.0

在请求头中添加 x-api-key:
curl -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ" http://127.0.0.1:1881/api/endpoint
在请求头中添加 x-access-token:
curl -H "x-access-token: YOUR_JWT_TOKEN" http://127.0.0.1:1881/api/endpoint
端点: GET /api/version
请求:
curl -X GET "http://127.0.0.1:1881/api/version" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"
响应:
"1.0.0"
状态: ✅ 成功
端点: 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
}
状态: ✅ 成功
端点: 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"
}
}
}
状态: ✅ 成功
端点: 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 '', "{"devices"... is not valid JSON<br>
</pre>
</body>
</html>
状态: ❌ 失败 - JSON 解析错误
端点: 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
}
]
状态: ✅ 成功
端点: GET /api/roles
请求:
curl -X GET "http://127.0.0.1:1881/api/roles" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"
响应:
[]
状态: ✅ 成功(无角色数据)
端点: GET /api/alarms
请求:
curl -X GET "http://127.0.0.1:1881/api/alarms" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"
响应:
[]
状态: ✅ 成功(无报警)
端点: GET /api/alarmsHistory
请求:
curl -X GET "http://127.0.0.1:1881/api/alarmsHistory" -H "x-api-key: awnNx4VWqdh9AFBe3C58OaUUVqwIDS0F2RMBsELQ"
响应:
[]
状态: ✅ 成功(无历史记录)
端点: 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
}
]
状态: ✅ 成功
端点: 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"}
]
}
]
}
状态: ✅ 成功
端点: 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\":{}}"
}
]
状态: ✅ 成功
端点: 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"}
]
}
]
}
状态: ✅ 成功
端点: 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
}
]
状态: ✅ 成功
端点: 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 支持以下设备连接:
secureEnabled: false,生产环境建议启用认证http://127.0.0.1:1881/api-docs 访问交互式 API 文档A: 需要通过 FUXA Web 界面的用户管理功能创建新的 API Key。
A: 需要联系管理员重新生成或更新 API Key。
A: 检查请求参数格式是否正确,确保 JSON 格式符合规范。
A: 主要支持 GET、POST、DELETE 方法,具体取决于 API 端点。
技术支持