Skip to main content

Restful Source

实时平台支持实时采集Restful API的数据。基础逻辑是间隔轮训式的传参进行查询,获取接口返回的数据并写入下游。

下文介绍在向导模式中使用EMQ作为数据源的采集配置逻辑。

配置项操作和解释

  • 操作页面:

image-20220629154037718

参数解释:

配置说明
协议/请求方式/URL/Header参数在选择数据源时,会根据数据源中心的配置自动带入配置信息
Body参数参数配置完成后将以Json形式发送并请求,具体说明如下:
Key:请求参数名称
Value:请求参数值
嵌套:当参数值存在多层嵌套关系时,勾选该复选框进行标识,并选择对应的嵌套切分键;
嵌套切分键:对所有勾选嵌套的Key、Value、NextValue生效;使用切分键可指向动态参数中的嵌套字段,例如${body.a/b};支持,(英文逗号),_(下划线), /(斜杆),.(英文句号) ,-(中划线),:(冒号)六种;不支持使用类似//的多字符切分键;
NextValue:次回请求参数值,支持静态、动态两种参数形式。其动态参数有两种来源如下:
— 内置变量
1. ${currentTime}:当前时间,获取当前时间,格式为yyyy-MM-dd HH:mm:ss类型
2. ${intervalTime}:间隔时间,代表下方配置参数中 请求间隔 的值
3. ${uuid}:32位的随机字符串
— param/body/response变量
1. ${param.key} 对应get请求param参数里key对应的值
2. ${body.key}对应post请求的body参数里key对应的值
3. ${response.key} 对应返回值里key对应的值
支持对动态参数进行加、减计算,例如 ${response.value}+100;
:::note
若对时间类型进行计算,平台将会将其转换为Unix时间戳处理,变化量单位为ms。
当 NextValue 值为空,平台会遵循用户设置的请求间隔重复发送Value内容请求回执。
当 NextValue 所指向的动态参数不存在,则实时采集任务直接失败。
:::
Format:时间参数值转化格式,因Restful API 返回值为字符串格式,若要解析出时间需要手动设置转化格式,例如 yyyy-MM-dd ,支持部分格式如下:
yyyy-MM-dd HH:mm:ss
yyyyMMddHHmmss
yyyy-MM-dd
HH:mm:ss
yyyy
:::note
原则上转换格式只需要与字符串相对应即可,对分隔符无特殊规定。
:::
异常策略通过异常策略可以配置采集任务的停止时机,比如当key=id采集到value=100时,停止该任务:
Key:请求参数名称,支持静态参数,也支持以 ${response.value} 的形式填写Body、Response的动态参数; Value:请求参数值
Strategy:异常策略,支持 立即停止重试三次失败后停止 两种异常策略;
返回类型支持根据 textJson 两种不同返回类型,对Restful API的Response进行处理,具体说明如下:
text:不进行任何处理,直接将Response输出至目标源
json:需要用户手动指定目标解析字段,若为嵌套格式,解析字段名称可由Json各层级Key以点隔开,例如 Key1.v1 。多个解析字段间通过英文逗号分隔。
请求间隔多次Restful API请求发起之间的间隔,单位为秒。
:::note
数据预览请求间隔为固定1s,如果存在接口范围值必须间隔XX秒的配置时,将会导致请求失败
:::

常见问题答疑

  • 实时采集任务运行一段时间后,为什么突然无法采集到的数据?

    请检查是否存在分页概念。若设置参数中存在分页参数,当实时采集任务请求频繁时且写入速率无法支持时,会导致数据为空,例如请求到70页,但实际数据仅有50页。解决方法:增大请求间隔。

  • 正常返回的日期数据作为NextValue参数,传值时变成纯数字怎么办?

    平台在处理Response的字符串时,会先默认根据标准时间格式进行解析并转化为Unix时间戳,再进行计算。如果此时不对该值声明Format形式,则会是纯数字形式。解决方法:涉及时间类型的动态参数最好添加Format。

  • 返回类型为Json的采集任务正常运行后突然失败?

    当指定采集的解析字段存在Key的Value值为空时,API不会传值,此时使用JSON格式会导致任务失败。解决方法:当存在字段返回值可能为空的情况时,建议使用 text 返回类型。

  • 是否支持对一个请求中的多条数据进行拆分,独立输出?

    暂不支持。

  • RestfulAPI采集是否有重试策略?具体是怎么样的?

    有重试策略,并且重试时会有对应的日志输出,可参考如下:

    1. 请求状态的处理 如果http/https的请求返回的http状态码不是200,默认重试三次 重试仅使用上次请求失败的参数进行重新请求。
    2. 异常策略的处理 根据用户设定的异常策略,可在接收到指定参数时进行重试。
  • 通过${response.errorCode}的方式指向返回值中的字段,为什么提示 errorCode not exist on responseValue because responseValue is empty ?

    5 2 2021 17 54 09 PM

    请检查是否返回类型为 TEXT 且 返回值并非标准Json格式。当选择text返回类型且返回内容为标准Json时,平台会对返回内容解析处理,此时指定的NextValue可获取到值;若返回内容不是标准JSON且指定了NextValue时,显示图中报错内容。解决方法:若返回值无法修改为标准Json格式,可修改返回类型为 Json 并手动设置解析字段。

  • 如果一个勾选嵌套的Body参数,切分键为「/」,指向data嵌套的id参数,Nextvalue为${response.data/id} 还是 ${response/data/id}?

    {response.data/id}