在现实的业务中,有很多数据需要通过 API 接口调用使用。
因此本文为用户介绍在 FineDataLink 中使用 API 取数并进行数据解析处理,最终将数据写入指定数据库的方案。
注:若需要使用 FineDataLink 发布API ,或者将数据推送到 API 接口,详情参见:API专题
使用「API输入」算子取数,然后通过 JSON解析 将 JSON 数据解析成常用的数据格式,并同步至数据库
JSON 数据二维化解析说明
JSONPath表达式
JSON解析算子功能说明
参数赋值节点
webservice调用介绍
API调用并存入数据库实战
接口取数
从企微自建应用中使用 读取成员 接口,获取部门所有人员信息
获取access_token
获取所有部门ID并设置为参数
遍历部门ID,获取userid,将userid落库
userid作为参数输出
遍历userid,获取人员信息
1、参数赋值+循环容器
使用高德接口获取城市天气数据
将经纬度数据转换为中文地址
2、按日期分表,每天保存当天数据:每天数据过大,希望能每天创建一个新的数据表,保存该天数据
3、API取数-钉钉获取部门列表:接口只能获取当前部门的下一级部门基础信息,不支持获取当前部门下所有层级子部门。因此需要依次根据父部门ID循环获取子部门ID
4、API取数-使用通讯录同步获取企业微信userid和部门:使用的接口:获取成员ID列表
5、PI数据库API循环取数:讲述如何从 PI 数据库取数
参数进行分组后再从接口循环取数
接口限制一次取数不能超过100,但实际场景中是超过100的
以获取企微月报打卡数据为例:
获取成员ID接口需要的access_token,输出为参数
获取企业微信成员 userid 和 department
将 userid 分组并输出为参数
准备接口所需的参数,根据成员分组批量循环取数
加密API取数实战
接口取数+MD5加密
使用MD5加密获取签名sign,从 API 接口取数
接口取数、接口参数做的操作:
为请求正文 Hash 摘要后再 base-16 编码的结果、
使用签名认证
使用 SparkSQL HMACSHA256函数
分页取数API实战
分页取数:按页数取数,其中接口中存在参数:
pageIndex:数据页数
pageSize:每一页的数据条数
4.1.3 及之后版本:
将 pageSize 设置为 100,获取总页数,输出参数totalpages
使用数据同步节点,从第一页开始取数,页码大于 totalpages 时,终止取数
4.1.3 之前版本:
使用循环容器和内置参数 loopTimes,从第一页开始取数,当循环次数 loopTimes>total_pages 时,停止执行
分页取数,接口返回值中没有总页数 total_pages,需要手动计算
请求参数:
pageNum:分页参数,数值可自定义
pageSize:每页数据条数,数值可自定义
返回值参数:
totalNum:返回取出数据的总数据条数
pageSize:返回取出数据的每页数据条数
将 pageSize 设置为 10,pageNum 为1,从第一页开始取数,取10条数据
根据返回值中的totalNum、pageSize,获取总页数 total_pages
使用数据同步节点,第一页开始递增 ${pageNum}页数参数,从接口取数,当页数参数 ${pageNum} 递增到大于总页数参数,则${total_pages},则分页结束
拖入循环容器节点,循环容器节点中拖入数据同步节点;pageSize:10、pageNum 使用内置参数${loopTimes}(初次为 1),也就是按照每页 10 条数据,从第一页开始递增从接口取数
循环执行条件为: loopTimes<=${total_pages}
分页取数,接口中没有页数相关的参数,但有:
limit:查询的数据条数,1-100,默认为10
data_id:上一次查询数据结果的最后一条数据的ID
为了从数据库中可以获得最大 id 作为参数,先随机取出 10 条数据落库
获取数据表中最大的 id 值作为参数
使用 id 值,每次从接口中取 100 条数据
找到每次执行的最后一行 id 值,输出为参数,若值为空,停止循环
循环执行 2-4 步骤
分页取数:按偏移量取数,接口参数如下:
FilterString:参数中使用日期区间作为参数,获取一段时间(开始时间和结束时间)作为日期参数,取出该段时间内的数据
StartRow:开始行索引
Limit:每次取数的限制条数
以金蝶云星空销售报价单接口为例:
获取开始时间和结束时间并输出为参数
使用数据同步节点,使用接口请求参数偏移量 StartRow 和每次的限制条数 Limit ,为 StartRow 赋值参数 ${offset},以 0 为初始值,增长间隔也就是 Limit 设置为 30,进行取数,也就是下一次循环则 offset 参数变为 30,如果最后一次取数返回的数据条数小于 Limit 限制 30,则此次数据就已经被取完,停止循环
设置 limit 为 30(值可自定义),并输出为参数
为了保证本次取数的纯净,删除目标数据表中本次取数的日期参数区间内的数据
计算指定日期区间中目标数据表数据除以 limit 参数的余数,将余数输出为参数,若为0,则表示目标表数据能被整除,表示还有未读取的接口数据,因此需要继续写入数据;若余数不为 0,则表示已经取出了指定日期中的所有接口数据,需要停止取数
若需要继续写入数据,获取每次循环开始行数,即获取每次循环请求参数 StartRow 的开始位置
使用开始时间 STARDATE 、结束时间 ENDDATE、Limit、startrow 从接口取数
循环执行 4-6 步骤
分页取数-按偏移量取数
返回参数:
Result.RowCount:返回所取数据的总行数
4.1.3 及之后版本,可参考:分页取数-按偏移量取数 实现
4.1.3 之前版本,可参考:API取数-以起始行数作为参数 方案实现
使用分页参数进行分页取数:
Body 参数中有分页参数 scrollid:
接口文档详情参见:根据时间窗滚动查询变动的员工与单条任职信息
分页取数+游标
Body 参数:
cursor:分页查询的游标,最开始传0,后续传返回参数中的next_cursor值
has_more:是否还有更多数据,true 为有,false 为没有
next_cursor:下一次分页的游标(如果has_more为false,表示没有更多的分页数据)
分页取数+加密
分页取数,调用接口时需要携带签名参数 sign,只有当 sign 值合法时请求才会被接受
使用 SHA2 加密签名 sign,并输出为参数
将每页数据限制为100条,获取总页数,输出参数totalpages(该过程使用到了加密sign)
使用循环容器和内置参数 loopTimes,从第一页开始取数,当循环次数 loopTimes>total_pages 时,停止执行(该过程使用到了加密sign)
嵌套循环取数
循环容器根据参数A循环取数
循环容器内,分页取数
以 慧策-WMS库存全量查询接口 取数为例:
将仓库编码输出为参数
循环容器遍历仓库编码参数,循环容器中拖入数据同步节点,分页取数
有些复杂,详情请参考文档:方案二
如何调用 FineDataLink 定时任务接口
1)如果需将加工、融合后的数据封装并发布为规范化 API 接口数据,供外部系统调用,实现数据价值输出及共享开放。详情参见:数据服务概述
最佳实践请参考:使用数据服务对数据进行分发管控
2)如果需要将多应用系统的数据通过 FDL 打通,实现业务系统间的数据交互(交互的形式为API)。比如系统中数据取出并分析后,希望直接把分析结果数据推送到业务系统中(以 API 的形式),形成业务系统里面需要直接处理的业务数据,打通分析到业务的流程。详情参见:API输出逻辑说明
最佳实践请参考:活动日程信息更新至企业微信日程、新增/修改宜搭表单数据
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙