本文通过几个典型的场景案例说明 Dataway 在腾讯云数据连接器系统中应用。
腾讯轻联对 企业微信 API 进行了封装,即企业微信连接器,用户可以通过可视化配置轻松完成成员管理、消息推送等多种操作。
连接器隐藏了许多复杂的数据处理和 API 调用,例如:业务 API 都依赖 access_token 登录凭证来鉴权调用者身份,因此,在调用API前,都需要先获取 access_token。
本示例将模拟 access_token 获取过程,并说明 Dataway 脚本在其中起到的作用。
鉴于业务 API 都依赖 access_token,access_token 必然会频繁使用,因此,在调用 API 获取 access_token 后,可以将其缓存起来,再次获取时直接从缓存读取,减少API调用。整条流的配置如下,根据是否缓存了 access-token 将流执行分为两种情况,若已缓存,从缓存读取即可,否则,需要调用 API 获取 access_token:
三个条件判断组件组合在一起,将流执行分为了两种情况,若符合组件4的执行条件,则流向组件5和6,其余情况流向组件8、9、10和11。其中,组件4的执行条件期望是一个条件表达式,因而使用 表达式 模式引用了"缓存-检查是否存在"组件2的输出,即是否缓存了 access-token。
在缓存中,以键值"access-token"绑定 access_token 数据,由于键值是固定的,可以使用 文本 模式以字面量的方式输入"access-token"。
在缓存存储(组件11)中,还需要设置需要缓存的数据,即变量 access_token,可以使用 文本 模式通过集成流数据面板引用变量 access_token。
获取 access_token 的API需要 corpid 和 corpsecret 两个参数,在"企业微信"连接器中,这两个参数在连接器配置中直接输入即可。在示例中,通过"配置变量"组件8设置变量 corpId 和 corpSecret 来表示这两个参数的获取过程。corpId 和 corpSecret 作为固定值,可以使用 文本 模式以字面量的方式输入。示例图片中以 test-corpid
和 test-corpsecret
代替真实 corpid 和 secret,用户可跟随 企业微信 API 文档的引导,查询自己真实的 corpid 和 secret。
"配置变量"组件6和11将获取的 access_token 设置为变量,方便调用业务API等后续过程使用。组件11需要从API调用的响应数据中找到对应的 access-token,这是一个数据处理过程,使用 表达式 模式对引用的API调用数据进行解析。
组件6从缓存中取出 access_token,直接使用 文本 模式引用"缓存-读取"组件的输出即可
组件11需要从API调用的响应数据中找到 access-token,这是一个数据处理过程,使用 表达式 模式对引用的API调用数据进行解析
"HTTP请求"组件向企业微信API地址发起 get-token 请求调用,请求参数为变量中的 corpId 和 corpSecret,使用"代码"模式动态设置"配置"中的"URL参数"。无论是 Python 异或 Java 脚本,均可使用"集成流数据面板"引用变量 corpId 和 corpSecret。
?实际使用时,企业微信连接器使用 XML 语言完成 get-token,本示例为了展示 Dataway 使用方式在流中复现了这一过程。Dataway 在其中主要的作用是流转和预处理消息 Message ,实现动态赋值,并将数据交给上层调用组件使用。
使用 Dataway 可以完成数据类型的转换,如 JSON 转换成 XML、XML 转换成 CSV 等,在此以 JSON 类型的数据转换成 XML 为例。
我们在流中预先使用"配置Payload"组件将当前消息载荷(msg.payload)设置为 JSON 格式的 Entity 数据。
def
dw_process(msg):
return Entity.from_value({
'name': 'zhangsan',
'age': 12,
'male': True,
'brothers': ['lisi', 'wangwu'],
}, mime_type="application/json")
新增"配置Payload"组件,模拟需要输入 XML 数据的组件,此时,可以使用 代码模式 Python 脚本将 JSON 数据转化为 XML 数据。
def
dw_process(msg):
input_param = msg.payload['^value']
return Entity.from_value({
'root': {
'name': input_param['name'],
'age': input_param['age'],
'male': input_param['male'],
'brothers': input_param['brothers'],
"@id": "haha"
}
}, mime_type="application/xml")
使用 Entity 获取二进制数据并解码,可以查看输出的 XML 结构字符串,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<root id="haha">
<name>zhangsan</name>
<age>12</age>
<male>true</male>
<brothers>lisi</brothers>
<brothers>wangwu</brothers>
</root>
?Dataway 表达式通过 Entity 类型提供强大的数据转换功能,通过设置不同的 MIME 类型,可以实现不同类型之间的数据转换。详情请见 基本概念-MIME类型支持。