最近在整理课程,基于最新thingsboard版本3.9.1/4.0,欢迎大家点赞,收藏、关注我,提问,在评论区留言,我争取把最新、最准、最好的课程,呈现在各位亦师亦友的csdn广大读者面前。
本节点:发送rest call 请求。
应用场景:
提交数据,获取数据,上报告警。
基本概念:
REST API是“Representational State Transfer Application Programming Interface”(表述性状态转移应用程序接口)的简称,是一种基于HTTP协议的网络接口设计风格,常用于前后端或系统间的数据交互。
REST 的核心概念如下:
资源(Resource):一切对外提供的内容都是资源,比如用户、图片、文章等,每个资源通过一个URL唯一标识。
例:https://qeeking.com/api/users/abc3356 表示用户ID为abc3356的用户资源。
HTTP 方法:对应对资源的操作:
GET:获取资源
POST:创建资源
PUT:更新资源(通常是整体更新)
DELETE:删除资源
无状态性(Stateless):每次请求都是独立的,不依赖之前的请求,服务器不会记住客户端的状态。
使用标准的数据格式:通常是 JSON,也可以是 XML。
说明:
[x] 节点名称*:本节点的名称;
[x] Endpoint URL pattern*:配置外部REST API接口路径;
[x] Request method*:请求方式;
[x] Enable proxy:配置代理,默认不勾选
[x] Use simple client HTTP factory:使用简化 http 客户端工厂,默认不勾选;
[x] Parse to plain text:解析为明文字符,默认不勾选;
[x] Without request body:不带请求消息体,默认不勾选;
[x] Read timeout in millis:设置读取超时时间,默认为0表示无限超时时间;
[x] Max number of parallel requests:最大并行请求数,默认为0表示无限制;
[x] Max response size (in KB):最大回应消息大小KB;
[x] Header:消息头,非必填项;
[x] Credentials:认证方式,非必填项;
认证模式有三种:匿名/基础/PEM。
Anonymous - no authentication
Basic - username\password pair is used for authenticating
PEM - PEM certificates are used for Authentication
如果选择PEM,则需要提供以下材料:
CA certificate file CA证书文件
Certificate file 证书文件
Private key file 私钥文件
Private key password 私钥密码
应用场景测试:
(1)准备工作
在192.168.1.115服务器上,使用npm install -g json-server命令,安装json-server;
使用json-server,模拟rest api server;
打开一个新的cmd命令窗口,进入zzbak目录下,
命令:json-server testcall.json
人工方式在浏览器访问,如下:
(2)新建规则链节点-命名为testrestapi
规则链如下:蓝色箭头所指的节点3
使用Jmeter产生遥测消息,如下:
1:
{
"Seqno": 81,
"BusVoltage": 378,
"humidity": 22,
"temperature": 77
}
2:
{
"deviceName": "Test Device A1",
"deviceType": "default",
"ts": "1746409283934"
}
3:
{
"totalPages": 1,
"totalElements": 9,
"hasNext": false
} // 注意:如上,传出消息体是rest api节点得到的回应消息内容。
4:
{
"Access-Control-Allow-Headers": "content-type",
"Access-Control-Allow-Methods": "GET, HEAD, PUT, PATCH, POST, DELETE",
"Access-Control-Allow-Origin": "*",
"Connection": "keep-alive",
"Content-Length": "63",
"Content-Type": "application/json",
"Date": "Mon, 05 May 2025 01:41:23 GMT",
"Keep-Alive": "timeout=5",
"X-Powered-By": "tinyhttp",
"deviceName": "Test Device A1",
"deviceType": "default",
"status": "OK",
"statusCode": "200",
"statusReason": "OK",
"ts": "1746409283934"
} // 注意:如上,蓝色部分几个字段,是本节点传出消息元数据中的新增项。
日志节点的事件如下:
打印日志如下:
(3)处理rest api call的回应消息
一般来说,rest api的resonse消息,包含header,body,statuscode。
从上面事件日志可以看到,蓝色字体部分,回应消息的header,status/statusCode/statusReason自动填充到消息元数据中。metadata。
从上面事件日志可以看到,紫色字体部分,回应消息的boday部分,放在消息中。msg。
处理rest api call的回应消息,有几种方法:
3-1 从消息元数据metadata中获取status/statusCode/statusReason,分情况处理后续流程。
比如,使用变换script节点,判断if (medata.statusCode === 200),输出新msg或metadata。
比如,使用筛选器script节点,判断msg或metadata的某个key,输出True或False。
比如,使用筛选器switch节点,判断msg或metadata的某个key,输出one/two/three等。
3-2 保存响应数据为attribute或telemetry
保存为attribute,使用动作save attributes节点。
保存为telemetry,使用动作save time series节点。