Skip to content

REST动作

该动作用于将输出消息发布到 RESTful API 中。

属性名称是否可选说明
methodRESTful API 的 HTTP 方法。 这是一个不区分大小写的字符串,其值范围为"get","post","put","patch","delete" 和 "head"。 默认值为 "get",支持动态获取。
urlRESTful API 终端地址,例如 https://www.example.com/api/dummy,支持动态获取。
bodyType消息体的类型。 当前,支持以下类型:"none", "json", "text", "html", "xml", "javascript", "form", "binary" 和 "formdata"。 对于 "get" 和 "head",不需要正文,因此默认值为 "none"。 对于其他 http 方法,默认值为 "json"。对于 "html","xml" 和 "javascript",必须仔细设置 dataTemplate 以确保格式正确。支持动态获取。
formdatatrue设置 bodyType 为 formdata 时可用。本属性用于设置表单数据的键值对。编码后的内容(字节形式)将作为文件附件传输,而每个键值对代表multipart表单的一个部分
fileFieldNametrue设置 bodyType 为 formdata 时可用,定义表单提交中文件部分的参数名称

| timeout | 是 | HTTP 请求超时的时间(毫秒),默认为5000毫秒 | | headers | 是 | 要为 HTTP 请求设置的其它 HTTP 头。支持动态获取。 | | debugResp | 是 | 控制是否将响应信息打印到控制台中。 如果将其设置为 true,则打印响应。 如果设置为false ,则跳过打印日志。默认值为 false。 | | certificationPath | 是 | 证书路径。可以为绝对路径,也可以为相对路径。如果指定的是相对路径,那么父目录为执行 kuiperd 命令的路径。比如,如果你在 /var/kuiper 中运行 bin/kuiperd ,那么父目录为 /var/kuiper; 如果运行从 /var/kuiper/bin 中运行./kuiperd,那么父目录为 /var/kuiper/bin。 | | privateKeyPath | 是 | 私钥路径。可以为绝对路径,也可以为相对路径,相对路径的用法与 certificationPath 类似。 | | rootCaPath | 是 | 根证书路径,用以验证服务器证书。可以为绝对路径,也可以为相对路径,相对路径的用法与 certificationPath 类似。 | | insecureSkipVerify | 是 | 控制是否跳过证书认证。如果被设置为 true,那么跳过证书认证;否则进行证书验证。缺省为 true。 | | oAuth | 是 | 定义类 OAuth 的认证流程。其他的认证方式如 apikey 可以直接在 headers 设置密钥,不需要使用这个配置。详情请见OAuth 配置。 |

其他通用的 sink 属性也支持,请参阅公共属性

REST 服务通常需要特定的数据格式。 这可以由公共目标属性 dataTemplate 强制使用。 请参考数据模板。 以下是用于连接到 Edgex Foundry core 命令的示例配置。dataTemplate{{.key}} 表示将打印出键值,即 result [key]。 因此,这里的模板是在结果中仅选择字段 key,并将字段名称更改为 newKeysendSingle 是另一个常见属性。 设置为 true 表示如果结果是数组,则每个元素将单独发送。

json
{
  "rest": {
    "url": "http://127.0.0.1:59882/api/v1/device/cc622d99-f835-4e94-b5cb-b1eff8699dc4/command/51fce08a-ae19-4bce-b431-b9f363bba705",
    "method": "post",
    "dataTemplate": "\"newKey\":\"{{.key}}\"",
    "sendSingle": true
  }
}

使用 OAuth 风格鉴权的示例:

json
{
  "id": "ruleFollowBack",
  "sql": "SELECT follower FROM followStream",
  "actions": [
    {
      "rest": {
        "url": "https://com.awebsite/follows",
        "method": "POST",
        "sendSingle": true,
        "bodyType": "json",
        "dataTemplate": "{\"data\":{\"relationships\":{\"follower\":{\"data\":{\"type\":\"users\",\"id\":\"1398589\"}},\"followed\":{\"data\":{\"type\":\"users\",\"id\":\"{{.follower}}\"}}},\"type\":\"follows\"}}",
        "headers": {
          "Content-Type": "application/vnd.api+json",
          "Authorization": "Bearer {{.access_token}}"
        },
        "oAuth": {
          "access": {
            "url": "https://com.awebsite/oauth/token",
            "body": "{\"grant_type\": \"password\",\"username\": \"user@gmail.com\",\"password\": \"mypass\"}",
            "expire": "3600"
          }
        }
      }
    }
  ]
}

Visualization mode 以可视化图形交互创建 rules 的 SQL 和 Actions

Text mode 以json格式创建 rules 的 SQL 和 Actions

创建写 taosdb rest示例:

json
{
  "id": "rest1",
  "sql": "SELECT tele[0].Tag00001 AS temperature, tele[0].Tag00002 AS humidity FROM neuron",
  "actions": [
    {
      "rest": {
        "bodyType": "text",
        "dataTemplate": "insert into mqtt.kuiper values (now, {{.temperature}}, {{.humidity}})",
        "debugResp": true,
        "headers": {
          "Authorization": "Basic cm9vdDp0YW9zZGF0YQ=="
        },
        "method": "POST",
        "sendSingle": true,
        "url": "http://xxx.xxx.xxx.xxx:6041/rest/sql"
      }
    }
  ]
}

设置动态输出参数

很多情况下,我们需要根据结果数据,决定写入的目的地址和参数。在 REST sink 里,methodurlbodyTypeheaders 支持动态参数。动态参数可通过数据模板语法配置。接下来,让我们使用动态参数改写上例。假设我们收到了数据中包含了 http 方法和 url 后缀等元数据。我们可以通过改写 SQL 语句,在输出结果中得到这两个值。规则输出的单条数据类似:

json
{
  "method": "post",
  "url": "http://xxx.xxx.xxx.xxx:6041/rest/sql",
  "temperature": 20,
  "humidity": 80
}

在规则 action 中,可以通过数据模板语法取得结果数据作为属性变量。如下例子中,methodurl 为动态变量。

json
{
  "id": "rest2",
  "sql": "SELECT tele[0]->Tag00001 AS temperature, tele[0]->Tag00002 AS humidity, method, concat(\"http://xxx.xxx.xxx.xxx:6041/rest/sql\", urlPostfix) as url FROM neuron",
  "actions": [
    {
      "rest": {
        "bodyType": "text",
        "dataTemplate": "insert into mqtt.kuiper values (now, {{.temperature}}, {{.humidity}})",
        "debugResp": true,
        "headers": {
          "Authorization": "Basic cm9vdDp0YW9zZGF0YQ=="
        },
        "method": "{{.method}}",
        "sendSingle": true,
        "url": "{{.url}}"
      }
    }
  ]
}

文件上传

如需将数据通过文件形式上传至HTTP服务器,可采用bodyType=formdata配置方式。

核心特性

  • Content type 采用 "multipart/form-data"
  • 规则生成的二进制数据将作为表单文件内容上传
  • 可通过formData配置其他表单属性

最佳实践

  • 对于高频数据源,应配置批量或窗口聚合功能,避免频繁上传小文件

配置示例

json
{
  "id": "restUpload",
  "sql": "SELECT value1, value2 FROM neuron",
  "actions": [
    {
      "rest": {
        "url": "http://yoururlhere.com",
        "method": "post",
        "fileFieldName": "file1",
        "formData": {
          "key1": "value1",
          "key2": "value2"
        },
        "batchSize": 10,
        "format": "delimited",
        "sendSingle": true
      }
    }
  ]
}

本示例中,每10条记录将生成一个 CSV 文件上传。