4、HTTP节点概述:REST API调用节点(REST API Call)功能、适用场景、与其他节点的区别

REST API Call 节点是 ThingsBoard 规则链中用于发起外部 HTTP 请求的核心节点。它允许规则链在消息处理过程中,将设备数据、告警信息或业务上下文通过 RESTful 接口发送到第三方系统,或从外部服务获取数据后继续流转。该节点是打通 IoT 平台与外部业务系统的关键桥梁。

4.1 核心功能

REST API Call 节点封装了完整的 HTTP 客户端能力,支持以下关键特性:

功能维度 说明
请求方法 支持 GET、POST、PUT、DELETE、PATCH 五种标准 HTTP 方法
动态 URL URL 支持使用 ${metadataKey} 或 ${msg.field} 模板语法动态拼接
请求头定制 可添加自定义 Header,如 Authorization、Content-Type、X-Request-ID
请求体构造 支持 JSON、纯文本、表单格式;可使用消息体或元数据动态填充
响应处理 将 HTTP 响应状态码、响应体、响应头写入元数据或消息体,供下游节点使用
超时与重试 可配置请求超时时间(默认 10s),失败后支持重试策略
安全认证 支持 Basic Auth、Bearer Token、自定义 Header 认证方式
关键设计原则:REST API Call 节点是同步阻塞调用。规则链会等待外部 HTTP 响应返回后,再继续执行后续节点。对于不需要等待响应的场景,建议使用“发送到外部系统”节点或异步队列方式。

4.2 适用场景

REST API Call 节点在 IoT 集成中承担着数据上行与指令下行的双重角色,典型场景包括:

  • 设备数据推送:将传感器数据实时推送到企业 ERP、MES 或大数据平台
  • 告警通知:触发告警时调用第三方短信、邮件或即时通讯 API(如钉钉、Slack)
  • 状态同步:设备上线/离线时同步状态到资产管理系统
  • 外部数据查询:在规则链中调用外部天气、地理编码或设备档案 API 获取补充信息
  • 命令下发:接收用户指令后,通过 REST 接口转发到边缘网关或执行器
  • 鉴权与令牌刷新:在规则链中动态获取 OAuth2 令牌并缓存到元数据

4.3 与其他节点的区别

ThingsBoard 规则链中涉及外部通信的节点还有“发送邮件”、“发送 SMS”、“MQTT 发布”等。REST API Call 节点在通用性和灵活性上具有明显差异:

对比维度 REST API Call 节点 发送邮件 / SMS 节点 MQTT 发布节点
通信协议 HTTP/HTTPS SMTP / 运营商协议 MQTT
数据格式 JSON、文本、表单(灵活) 固定模板(邮件正文、短信内容) 二进制 / JSON(灵活)
响应处理 支持读取响应体、状态码、Header 仅返回成功/失败状态 无响应(发布即忘)
动态 URL 支持模板语法动态拼接 不支持 支持动态 Topic
认证方式 Basic、Bearer、自定义 Header 账号密码(固定) 用户名密码 / 证书
适用场景 通用 REST API 集成 特定通知渠道 IoT 设备双向通信
选型建议:当需要与第三方 Web 服务、微服务、云 API 集成时,优先选择 REST API Call 节点。如果仅需发送邮件或短信,使用专用节点配置更简单。MQTT 发布节点更适合设备端到端的实时通信场景。

4.4 节点内部处理流程

REST API Call 节点在规则链中的执行逻辑可分为五个阶段,理解这一流程有助于排查调用失败问题:

  1. 消息入站:上游节点将消息(含消息体、元数据)传递到 REST API Call 节点
  2. 模板解析:节点解析 URL、Header、Body 中的模板变量,替换为实际值
  3. HTTP 请求发送:根据配置的方法、超时、认证信息发起 HTTP 调用
  4. 响应接收:等待外部服务返回响应,记录状态码、响应体、响应时间
  5. 结果路由:根据 HTTP 状态码或自定义条件,将消息路由到 Success / Failure 链
REST API Call 节点内部处理流程 消息入站 模板解析 HTTP 请求 响应接收 结果路由 超时 / 重试控制 Success / Failure 每个阶段均可通过日志节点输出调试信息,便于定位调用链路问题 状态码路由规则示例 2xx → Success 链 | 4xx → Failure 链(可配置重试) | 5xx → Failure 链(触发告警)

4.5 节点配置参数速查

在 ThingsBoard UI 中配置 REST API Call 节点时,以下参数需要重点关注:

参数名称 类型 必填 说明
请求方法 枚举 是 GET / POST / PUT / DELETE / PATCH
端点 URL 字符串 是 支持模板变量,如 https://api.example.com/v1/devices/${deviceId}
请求头 键值对 否 可添加多个自定义 Header,支持模板
请求体 文本 否 POST/PUT 时使用,支持 JSON 模板
超时 (ms) 整数 否 默认 10000ms,超过则触发 Failure
重试次数 整数 否 0-5 次,仅在 Failure 时重试
认证类型 枚举 否 None / Basic / Bearer Token
响应处理 开关 否 是否将响应体写入消息体或元数据
常见陷阱:
  • URL 模板变量未定义时,节点会直接失败,不会发送请求
  • 响应体过大(超过 1MB)可能导致规则链内存溢出,建议在外部服务端做分页或截断
  • Bearer Token 过期后不会自动刷新,需配合“生成令牌”节点或自定义逻辑处理
  • 同步调用会阻塞规则链线程,高并发场景建议使用异步节点或增加规则链并行分支