本文通过几个典型的场景案例说明 Dataway 在腾讯云腾讯轻联系统中应用。
使用 Dataway 获取 token
腾讯云腾讯轻联对 企业微信 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:


组件说明
条件判断(组件3、4、7)
三个条件判断组件组合在一起,将流执行分为了两种情况,若符合组件4的执行条件,则流向组件5和6,其余情况流向组件8、9、10和11。其中,组件4的执行条件期望是一个条件表达式,因而使用 表达式 模式引用了"缓存-检查是否存在"组件2的输出,即是否缓存了 access-token。


缓存(组件2、5、11)
在缓存中,以键值"access-token"绑定 access_token 数据,由于键值是固定的,可以使用 文本 模式以字面量的方式输入"access-token"。


在缓存存储(组件11)中,还需要设置需要缓存的数据,即变量 access_token,可以使用 文本 模式通过集成流数据面板引用变量 access_token。


配置变量(组件6、8、11)
获取 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 请求(组件9)
"HTTP 请求"组件向企业微信 API 地址发起 get-token 请求调用,请求参数为变量中的 corpId 和 corpSecret,使用代码模式动态设置配置中的"URL 参数"。无论是 Python 异或 Java 脚本,均可使用"集成流数据面板"引用变量 corpId 和 corpSecret。




说明:
实际使用时,企业微信连接器使用 XML 语言完成 get-token,本示例为了展示 Dataway 使用方式在流中复现了这一过程。Dataway 在其中主要的作用是流转和预处理消息 Message ,实现动态赋值,并将数据交给上层调用组件使用。
将 JSON 类型输入转换成 XML 类型输入
使用 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")
代码模式 Python 脚本
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['^blob'] 获取二进制数据并解码,可以查看输出的 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>
说明: