规则链管理 API
创建规则链
接口描述
在指定 IoT Core 实例下创建一条新的规则链。新规则链初始状态为 DISABLED。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/rulechain |
POST |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID,必须属于当前租户 |
clientToken |
String |
否 |
QueryParam |
- |
幂等 token,长度 1~64 |
name |
String |
否 |
JsonBody |
- |
规则链名称,2~32 字符;只允许中文、字母、数字、下划线和连字符;同一 IoT Core 下唯一 |
description |
String |
否 |
JsonBody |
- |
规则链描述,最长 128 字符,允许空字符串 |
clientToken 的幂等范围是当前租户,不是单个 iotCoreId。同一租户重复使用 token 时返回第一次创建的 rulechainId。
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
rulechainId |
String |
新创建的规则链 ID |
请求示例
1POST /v1/flow/iotcore/xxxx/rulechain?clientToken=create-rule-20260804-001 HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
4Content-Type: application/json; charset=utf-8
5
6{
7 "name": "temperature-rule",
8 "description": "温度消息转储规则"
9}
返回示例
1{
2 "rulechainId": "0123456789abcdef0123456789abcdef"
3}
异常返回
| HTTP Code |
code |
描述 |
| 400 |
框架参数校验错误 |
clientToken 为空或超过 64 字符,或者 body 字段不符合约束 |
| 400 |
RulechainNameOccupied |
同一 IoT Core 下规则链名称已被占用 |
| 400 |
RulechainQuantityExceed |
已达到规则链配额 |
| 404 |
ResourceNotFound |
{iotCoreId} 对应的规则引擎不存在 |
获取规则链列表
接口描述
查询指定 IoT Core 下的规则链,支持名称包含匹配、状态过滤和创建时间排序。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/rulechain |
GET |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
pageNo |
Integer |
是 |
QueryParam |
1 |
页码,从 1 开始 |
pageSize |
Integer |
是 |
QueryParam |
10 |
每页数量,范围 1~100 |
orderBy |
String |
是 |
QueryParam |
createTime |
排序字段,当前只支持 createTime |
order |
String |
是 |
QueryParam |
desc |
asc 或 desc,区分大小写 |
name |
String |
是 |
QueryParam |
"" |
名称包含匹配;空字符串表示不过滤 |
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
totalCount |
Integer |
符合过滤条件的总记录数 |
pageNo |
Integer |
当前页码 |
pageSize |
Integer |
当前每页数量 |
success |
Boolean |
请求成功时固定为 true |
result |
List<RulechainInfo> |
当前页规则链列表;无数据时为空数组 |
RulechainInfo
| 名称 |
类型 |
描述 |
rulechainId |
String |
规则链 ID |
name |
String |
规则链名称 |
description |
String |
规则链描述 |
state |
String |
用户操作状态 |
status |
String |
运行状态 |
createTime |
Long |
创建时间,Unix 毫秒时间戳 |
请求示例
1GET /v1/flow/iotcore/xxxx/rulechain?pageNo=1&pageSize=10&orderBy=createTime&order=desc&name=temp HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
返回示例
1{
2 "totalCount": 1,
3 "pageNo": 1,
4 "pageSize": 10,
5 "success": true,
6 "result": [
7 {
8 "rulechainId": "0123456789abcdef0123456789abcdef",
9 "name": "temperature-rule",
10 "description": "温度消息转储规则",
11 "state": "DISABLED",
12 "status": "PENDING",
13 "createTime": 1785772800000
14 }
15 ]
16}
异常返回
| HTTP Code |
code |
描述 |
| 400 |
ParametersInvalid |
pageNo < 1、pageSize 不在 1~100,或者排序、state、status 参数非法 |
| 404 |
ResourceNotFound |
{iotCoreId} 对应的规则引擎不存在 |
获取规则链详情
接口描述
获取规则链描述、运行状态、源 topic、计算规则、正常目的地和错误目的地。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/rulechain/{rulechainId} |
GET |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
rulechainId |
String |
否 |
URLPath |
- |
规则链 ID |
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
name |
String |
规则链名称 |
description |
String |
规则链描述 |
status |
String |
运行状态; |
createTime |
Long |
创建时间,Unix 毫秒时间戳 |
topic |
String |
IoT Core 源 topic;尚未配置时为空字符串 |
compute |
Compute |
计算配置,字段见“公共数据类型” |
destinations |
List<Destination> |
正常目的地列表 |
errorDestinations |
List<Destination> |
错误目的地列表 |
请求示例
1GET /v1/flow/iotcore/xxxx/rulechain/0123456789abcdef0123456789abcdef HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
返回示例
1{
2 "name": "temperature-rule",
3 "description": "温度消息转储规则",
4 "status": "PENDING",
5 "createTime": 1785772800000,
6 "topic": "devices/+/temperature",
7 "compute": {
8 "message": "{\"temperature\":25}",
9 "schemaType": "JSON",
10 "toJsonProtoMessageName": "",
11 "toJsonSchemaContent": "",
12 "filter": "$temperature > 20",
13 "userdataQuery": "",
14 "query": "{\"temperature\":$temperature}"
15 },
16 "destinations": [
17 {
18 "type": "IOT_CORE",
19 "args": {
20 "iotcore": "target-iotcore-id",
21 "topic": "alerts/temperature",
22 "qos": "1"
23 }
24 }
25 ],
26 "errorDestinations": []
27}
异常返回
| HTTP Code |
code |
描述 |
| 404 |
ResourceNotFound |
规则引擎不存在,message 为 ruleengine doesn't exist |
| 404 |
ResourceNotFound |
规则链不存在,message 为 rulechain doesn't exist |
更新规则链配置
接口描述
全量替换规则链配置,请求都要提交描述、源 topic 和完整正常目的地列表。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/rulechain/{rulechainId} |
PUT |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
rulechainId |
String |
否 |
URLPath |
- |
规则链 ID |
description |
String |
否 |
JsonBody |
- |
规则链描述,最长 128 字符 |
topic |
String |
否 |
JsonBody |
- |
当前 IoT Core 的源 topic,最长 256 字符 |
compute |
Compute |
是 |
JsonBody |
null |
计算配置;不传表示不配置计算规则 |
destinations |
List |
否 |
JsonBody |
- |
完整正常目的地列表,数量 1~10 |
errorDestinations |
List |
是 |
JsonBody |
null |
错误目的地列表,最多 1 个 |
Compute、Destination 以及各 destination 类型的 args 见本文“公共数据类型”。
输出
HTTP Code:200,响应体为空。
请求示例
1PUT /v1/flow/iotcore/xxxx/rulechain/0123456789abcdef0123456789abcdef HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
4Content-Type: application/json; charset=utf-8
5
6{
7 "description": "温度消息转储规则",
8 "topic": "devices/+/temperature",
9 "compute": {
10 "message": "{\"temperature\":25}",
11 "schemaType": "JSON",
12 "filter": "$temperature > 20",
13 "userdataQuery": "",
14 "query": "{\"temperature\":$temperature}"
15 },
16 "destinations": [
17 {
18 "type": "EXTERNAL_KAFKA",
19 "args": {
20 "destinationId": "abcdef0123456789abcdef0123456789",
21 "key": "$deviceId",
22 "dynamicDestEnable": "false"
23 }
24 }
25 ],
26 "errorDestinations": []
27}
返回示例
处理说明
- 更新会替换 source、compute、destination 和规则关系数据。
EXTERNAL_KAFKA 和 EXTERNAL_HTTP 通过已创建的 destinationId 绑定到规则链。
- 错误目的地只支持
IOT_CORE、BMS、BOS、CFC、EXTERNAL_KAFKA,且不能与正常目的地指向同一资源。
异常返回
| HTTP Code |
code |
描述 |
| 400 |
ParametersInvalid |
缺少正常目的地、目的地重复、DSL 非法、参数或类型不支持 |
| 404 |
ResourceNotFound |
规则链、引用的外部目的地或云资源不存在 |
| 500 |
内部错误码 |
外部连接、订阅或事务失败 |
更新规则链状态
接口描述
启用或禁用指定规则链。Query 参数 updateState 只用于选择路由,不需要业务值。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/rulechain/{rulechainId}?updateState |
PUT |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
rulechainId |
String |
否 |
URLPath |
- |
规则链 ID |
state |
String |
否 |
JsonBody |
- |
更改规则链状态为 ENABLED或DISABLED |
输出
HTTP Code:200,响应体为空。
请求示例
1PUT /v1/flow/iotcore/xxxx/rulechain/0123456789abcdef0123456789abcdef?updateState HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
4Content-Type: application/json; charset=utf-8
5
6{
7 "state": "ENABLED"
8}
返回示例
调用方不能只根据 HTTP 200 判断状态已改变。对于重复或非法转换,应重新调用规则链列表接口确认最终 state。
异常返回
| HTTP Code |
code |
描述 |
| 404 |
ResourceNotFound |
规则链不存在 |
| 404 |
ResourceNotFound |
启用前未配置 source,message 为 rulesource is null |
| 404 |
ResourceNotFound |
启用前没有正常目的地,message 为 the rulechain has no destination |
| 500 |
内部错误码 |
订阅、取消订阅或状态更新失败 |
批量删除规则链
接口描述
一次软删除 1~10 条未启用、未运行的规则链。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/rulechain?batchDelete |
POST |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
rulechainIds |
List<String> |
否 |
JsonBody |
- |
待删除规则链 ID,数量 1~10;所有 ID 必须存在并属于当前规则引擎 |
输出
HTTP Code:200,响应体为空。
请求示例
1POST /v1/flow/iotcore/xxxx/rulechain?batchDelete HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
4Content-Type: application/json; charset=utf-8
5
6{
7 "rulechainIds": [
8 "0123456789abcdef0123456789abcdef"
9 ]
10}
返回示例
异常返回
| HTTP Code |
code |
描述 |
| 404 |
ResourceNotFound |
任一规则链不存在,message 为 Some rulechain doesn't exist |
| 框架默认 |
框架默认 |
尝试删除 state=ENABLED 或 status=RUNNING 的规则链 |
| 409 |
BatchSoftDeleteRulechainException |
并发更新导致实际软删除数量不匹配 |
目的地管理 API
创建外部目的地
接口描述
创建规则链可引用的 Kafka 或 HTTP 外部 destination。
HTTP 创建时执行 URL 和 DNS 校验;Kafka 创建过程中会真实连接 broker,创建 EXTERNAL_KAFKA 且 authType=CERT 时,必须先调用『上传 Kafka 证书文件接口』两次,取得 truststoreId 和 keystoreId。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/destination |
POST |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
clientToken |
String |
是 |
QueryParam |
服务端随机 UUID |
幂等 token,最长 64 字符; |
description |
String |
是 |
JsonBody |
"" |
目的地描述,最长 128 字符 |
type |
String |
否 |
JsonBody |
- |
外部目的地类型,支持EXTERNAL_HTTP、EXTERNAL_KAFKA |
args |
Map<String,String> |
否 |
JsonBody |
- |
类型相关参数,字段见“创建外部目的地参数” |
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
id |
String |
新创建的 destinationId |
请求示例
以下示例是上述 Kafka CERT 流程的第 3 步,其中两个 file ID 分别来自前两次『上传 Kafka 证书文件接口』:
1POST /v1/flow/iotcore/xxxx/destination?clientToken=create-dest-20260804-001 HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
4Content-Type: application/json; charset=utf-8
5
6{
7 "description": "生产 Kafka",
8 "type": "EXTERNAL_KAFKA",
9 "args": {
10 "authType": "CERT",
11 "address": "broker-a:9093,broker-b:9093",
12 "topic": "flow-output",
13 "truststoreId": "0123456789abcdef0123456789abcdef",
14 "truststorePassword": "truststore-password",
15 "keystoreId": "fedcba9876543210fedcba9876543210",
16 "keystorePassword": "keystore-password"
17 }
18}
返回示例
1{
2 "id": "abcdef0123456789abcdef0123456789"
3}
注意事项
- HTTP destination 创建时只做 URL、DNS 等校验,初始状态为
PENDING,随后使用“认证 HTTP 目的地”接口完成认证。
异常返回
| HTTP Code |
code |
描述 |
| 400 |
ParametersInvalid |
目的地类型或 args 非法 |
| 404 |
ResourceNotFound |
IoT Core 或 Kafka 引用的临时证书文件不存在 |
| 500 |
类型相关错误码 |
Kafka 网络、证书、凭据连接失败,或 HTTP 地址解析失败 |
上传 Kafka 证书文件
接口描述
上传 truststore 或 keystore 文件并返回临时 file ID。两个文件需要分别调用一次本接口,随后调用创建外部目的地接口。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/file/external-kafka |
POST |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
file |
MultipartFile |
否 |
FormData |
- |
JKS 文件流,multipart 字段名必须为 file;默认大小上限 3072 bytes |
文件约束:
| 项目 |
默认值或行为 |
| 单文件大小上限 |
5000 bytes |
| 单租户缓存文件数量上限 |
200 |
| 缓存有效期 |
3600 秒 |
| 存储形式 |
Base64 后写入缓存 |
| 文件名、扩展名、MIME |
不校验 |
| 空文件 |
当前上传大小校验允许,但后续 JKS 解析会失败 |
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
id |
String |
32 位临时 file ID,用作 Kafka 创建参数的 truststoreId 或 keystoreId |
请求示例
1POST https://iot.baidubce.com/v1/flow/iotcore/file/external-kafka
2
3FormData:
4 file: client.truststore.jks(JKS 二进制文件)
请求体类型为 multipart/form-data。file 是服务端要求的表单字段名,不能改成 truststore、keystore 或文件名;multipart boundary 由 HTTP 客户端自动生成,不需要调用方手动填写。
truststore 和 keystore 使用同一个接口分别上传。JKS 密码不在上传接口中传递,而是在创建 Kafka destination 时与两次上传返回的 file ID 一起提交。
返回示例
1{
2 "id": "0123456789abcdef0123456789abcdef"
3}
异常返回
| HTTP Code |
code |
描述 |
| 400 |
FileSizeExceed |
文件超过大小上限 |
| 400 |
FileQuantityExceed |
当前租户缓存文件数量达到上限 |
| 400 |
ParametersInvalid 或框架参数错误 |
file 参数无效 |
file ID 不是长期资源 ID。建议先上传 truststore 和 keystore,再立即创建 Kafka destination。
获取目的地列表
接口描述
查询可用于配置规则链的百度云内部资源或已创建的外部 destination。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/destination |
GET |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
sourceType |
String |
否 |
QueryParam |
- |
EXTERNAL,区分大小写 |
pageNo |
Integer |
是 |
QueryParam |
1 |
页码,从 1 开始 |
pageSize |
Integer |
是 |
QueryParam |
10 |
每页数量,范围 1~100 |
type |
String |
是 |
QueryParam |
"" |
指定目的地类型 EXTERNAL_KAFKA 或 EXTERNAL_HTTP |
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
totalCount |
Integer |
符合条件的总记录数 |
pageNo |
Integer |
当前页码 |
pageSize |
Integer |
当前每页数量 |
result |
List |
当前页目的地列表 |
DestinationProfile
| 名称 |
类型 |
描述 |
id |
String |
内部云资源 ID 或外部 destinationId |
name |
String |
资源或目的地名称;Kafka 使用创建时的 topic |
status |
String |
资源状态 |
description |
String |
目的地描述 |
createTime |
Long |
创建时间,Unix 毫秒时间戳 |
type |
String |
目的地类型 |
args |
Map<String,String> |
目的地参数 |
请求示例
1GET /v1/flow/iotcore/xxxx/destination?sourceType=EXTERNAL&type=EXTERNAL_KAFKA&pageNo=1&pageSize=10&orderBy=createTime&order=desc HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
返回示例
1{
2 "totalCount": 1,
3 "pageNo": 1,
4 "pageSize": 10,
5 "result": [
6 {
7 "id": "abcdef0123456789abcdef0123456789",
8 "name": "flow-output",
9 "status": "NORMAL",
10 "description": "生产 Kafka",
11 "createTime": 1785772800000,
12 "enableDelete": true,
13 "type": "EXTERNAL_KAFKA",
14 "args": {
15 "topic": "flow-output",
16 "address": "broker-a:9093,broker-b:9093",
17 "authType": "CERT"
18 }
19 }
20 ]
21}
异常返回
| HTTP Code |
code |
描述 |
| 400 |
ParametersInvalid |
分页、排序、sourceType、type 等字段非法 |
| 404 |
ResourceNotFound |
IoT Core 对应规则引擎不存在 |
批量删除外部目的地
接口描述
一次删除 1~10 个未被规则链使用的外部 destination。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/destination?batchDelete |
POST |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
destinationIds |
List |
否 |
JsonBody |
- |
待删除 destination ID,数量 1~10;所有 ID 必须存在 |
输出
HTTP Code:200,响应体为空。
请求示例
1POST /v1/flow/iotcore/xxxx/destination?batchDelete HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
4Content-Type: application/json; charset=utf-8
5
6{
7 "destinationIds": [
8 "abcdef0123456789abcdef0123456789"
9 ]
10}
返回示例
异常返回
| HTTP Code |
code |
描述 |
| 400 |
DestinationOccupied |
任一 destination 正被未删除规则链使用 |
| 404 |
ResourceNotFound |
任一 ID 不存在,message 为 Some resource provided are not found. |
认证 HTTP 目的地
接口描述
服务端向创建 HTTP destination 时保存的 address 发起 GET,并检查响应正文是否包含预期 authToken。接口受频率限制。
| 相对 URL |
HttpMethod |
/v1/flow/iotcore/{iotCoreId}/destination/{destinationId}?auth&type=EXTERNAL_HTTP |
GET |
输入
| 名称 |
类型 |
是否可选 |
参数位置 |
默认值 |
描述 |
iotCoreId |
String |
否 |
URLPath |
- |
IoT Core 实例 ID |
destinationId |
String |
否 |
URLPath |
- |
HTTP destination ID |
auth |
String |
否 |
QueryParam |
- |
路由标识,值会被忽略 |
type |
String |
否 |
QueryParam |
- |
当前只支持精确值 EXTERNAL_HTTP |
自动生成 token 的默认有效期为 259200000 ms,即 3 天。
输出
HTTP Code:200
| 名称 |
类型 |
描述 |
instanceId |
String |
请求中的 iotCoreId |
destinationId |
String |
请求中的 destination ID |
status |
String |
SUCCESS、EXPIRE 或 ERROR |
| status |
判定条件 |
destination 持久化状态 |
SUCCESS |
响应包含 token 且未过期 |
NORMAL |
EXPIRE |
响应包含 token 但 token 已过期 |
ERROR |
ERROR |
响应不包含预期 token |
ERROR |
请求示例
1GET /v1/flow/iotcore/xxxx/destination/abcdef0123456789abcdef0123456789?auth&type=EXTERNAL_HTTP HTTP/1.1
2Host: iot.baidubce.com
3Authorization: {authorization}
返回示例
1{
2 "instanceId": "xxxx",
3 "destinationId": "abcdef0123456789abcdef0123456789",
4 "status": "SUCCESS"
5}
异常返回
| HTTP Code |
code |
描述 |
| 400 |
ParametersInvalid |
type 缺失或不是 EXTERNAL_HTTP |
| 403 |
AuthFrequencyExceed |
auth 请求频率超过限制 |
| 400 |
ExternalHttpError |
请求目标 address 失败 |
公共数据类型
Compute
| 名称 |
类型 |
是否可选 |
默认值 |
描述 |
message |
String |
是 |
"" |
示例消息;IoT Core 默认最大 131072 字符 |
schemaType |
String |
是 |
JSON |
JSON、BINARY_PROTO 或 NONE |
toJsonProtoMessageName |
String |
是 |
"" |
Protobuf message 名称,最长 50;BINARY_PROTO 时必填 |
toJsonSchemaContent |
String |
是 |
"" |
Protobuf schema,最长 3000;BINARY_PROTO 时必填 |
filter |
String |
是 |
null |
Flow JSON DSL 过滤表达式,最长 256 |
userdataQuery |
String |
是 |
null |
Flow JSON DSL 用户数据映射,最长 2048 |
query |
String |
是 |
null |
Flow JSON DSL 消息映射,最长 2048 |
Schema 约束:
JSON:Protobuf 两个字段必须为空;message 非空时必须是合法 JSON,并结合示例消息校验表达式。
BINARY_PROTO:message 必须为非空 Base64,message 名称和 schema 必须非空且匹配。
NONE:其他计算字段必须为空或 null,消息原样透传。
Destination
| 名称 |
类型 |
是否可选 |
默认值 |
描述 |
type |
String |
否 |
- |
目的地类型 |
args |
Map<String,String> |
否 |
- |
类型相关参数 |
status |
String |
是 |
null |
详情响应字段,请求时无需设置 |
errorMessage |
String |
是 |
null |
详情响应字段,请求时无需设置 |
规则链 Destination args
| type |
args 字段 |
约束 |
IOT_CORE |
iotcore,topic,qos |
qos 为字符串 "0" 或 "1";目标实例属于当前租户;同实例下目的 topic 不能与源 topic 冲突 |
IOT_CORE_DYNAMIC |
iotcore,topic,qos |
topic 是最长 256 的 JSON DSL 表达式 |
TSDB |
region,database |
region 为 default|gz|bj,数据库必须存在 |
BMS |
region,topic |
region 为 default|gz|bj,bj 可能受白名单控制 |
CFC |
region,functionName,qualifier |
region 为 default|gz,函数和版本必须存在 |
BOS |
对象存储字段,见下表 |
bucket 必须属于当前租户;region 为 default|gz |
EXTERNAL_HTTP |
destinationId |
destination 状态必须为 NORMAL |
EXTERNAL_KAFKA |
destinationId;可选 key,dynamicDestEnable,dynamicTopic |
key 为最长 128 的 JSON DSL;dynamicDestEnable 为字符串 "true"|"false";为 "true" 时 dynamicTopic 必填且最长 128 |
创建外部目的地参数
以下 args 用于“创建外部目的地”,不同于规则链更新时引用 destination 的参数。
EXTERNAL_HTTP 的 name 只允许字母、数字、下划线和连字符,长度 1~40。Kafka 使用 topic 作为目的地名称,不传 name。
| type |
args 字段 |
约束 |
EXTERNAL_HTTP |
必填 name,address;可选 authToken |
address 最长 256,只支持 http/https;创建时执行 DNS 解析;authToken 若传必须匹配 [0-9a-z]{64},不传则自动生成 |
EXTERNAL_KAFKA |
见 Kafka 三种模式 |
topic 当前始终必填并匹配 [0-9A-Za-z_.-]{1,159} |
Kafka 三种创建模式
| 模式 |
必填 args |
address |
证书 |
| 自定义 SSL |
authType=CERT,address,topic,truststoreId,truststorePassword,keystoreId,keystorePassword |
必填,最长 1024 |
truststore 和 keystore 必填 |
| 专享 Kafka SSL |
authType=CERT,exclusiveKafkaEnable=true,exclusiveKafkaRegion,exclusiveKafkaClusterId,topic,以及四个证书字段 |
无需传;即使传入也不用于 endpoint 选择 |
truststore 和 keystore 必填 |
| 专享 Kafka PLAINTEXT |
authType=PLAINTEXT,exclusiveKafkaEnable=true,exclusiveKafkaRegion,exclusiveKafkaClusterId,topic |
无需传;即使传入也不用于 endpoint 选择 |
所有证书字段必须为空 |
Kafka 字段详情:
| 名称 |
类型 |
是否可选 |
默认值 |
描述 |
authType |
String |
否 |
- |
CERT 或 PLAINTEXT;PLAINTEXT 只允许专享 Kafka |
address |
String |
条件可选 |
- |
自定义 SSL 必填;专享 Kafka 由服务端根据集群和 authType 实时获取内网 endpoint |
topic |
String |
否 |
- |
Kafka topic,当前所有模式都必填 |
exclusiveKafkaEnable |
String |
是 |
null |
字符串 "true" 表示专享 Kafka;null 或 "false" 表示自定义 Kafka |
exclusiveKafkaRegion |
String |
条件可选 |
- |
专享 Kafka 必填,default、gz 或 bj |
exclusiveKafkaClusterId |
String |
条件可选 |
- |
专享 Kafka 必填 |
truststoreId |
String |
条件可选 |
- |
CERT 模式必填,32 位临时文件 ID |
truststorePassword |
String |
条件可选 |
- |
CERT 模式必填 |
keystoreId |
String |
条件可选 |
- |
CERT 模式必填,32 位临时文件 ID |
keystorePassword |
String |
条件可选 |
- |
CERT 模式必填 |
创建 Kafka destination 时不要携带规则级字段 key、dynamicDestEnable、dynamicTopic;这些字段应在更新规则链时配置。
通用异常返回
业务异常由统一异常处理器返回:
| 名称 |
类型 |
描述 |
requestId |
String |
本次请求 ID |
code |
String |
异常类型 |
message |
String |
异常详细信息 |
异常返回示例
1{
2 "requestId": "49eb817c-636d-4de1-b2c2-67a6004742f8",
3 "code": "ParametersInvalid",
4 "message": "Page number should not be less than 1."
5}
未经签名访问公网 endpoint 时,网关会在进入业务接口前返回类似:
1{
2 "requestId": "de0accc8-6c21-4bdf-a0cd-7660bfa286a7",
3 "code": "SignatureEmpty",
4 "message": "Signature is invalid: Signature is empty."
5}