反馈已提交

网络繁忙

API取数概述

  • 文档创建者:Roxy
  • 历史版本:33
  • 最近更新:Wendy123456 于 2024-01-30
  • 1. 概述

    在现实的业务中,有很多数据需要通过 API 接口调用使用。

    因此本文为用户介绍在 FineDataLink 中使用 API 取数并进行数据解析处理,最终将数据写入指定数据库的方案。

    注:若需要使用 FineDataLink 发布API ,或者将数据推送到 API 接口,详情参见:API专题

    2. 索引

    API 取数示例:

    应用场景方案说明参考文档
    API 入门如何查看 API 文档、如何在 FineDataLink 中使用 APIAPI入门
    直接从 API 接口取数,且数据为非 JSON 格式直接使用数据同步-API 取数并同步至数据库即可数据同步-API
    直接从 API 接口取数,且数据为 JSON 格式使用「API输入」算子取数,然后通过 JSON解析 将 JSON 数据解析成常用的数据格式,并同步至数据JSON解析
    直接从 API 接口取数,且数据为 XML 格式使用数据转换中的 API 取数并通过 XML 解析 将 XML 数据解析成行列数据格式,并同步至数据库XML 解析
    可读取 API 数据,并输出为参数

    参数赋值节点

    接口取数

    企微自建应用中使用 读取成员 接口,获取部门所有人员信息

    1. 获取access_token

    2. 获取所有部门ID并设置为参数

    3. 遍历部门ID,获取userid,将userid落库

    4. userid作为参数输出

    5. 遍历userid,获取人员信息

    API取数-获取企业微信人员信息

    接口取数

    1、参数赋值+循环容器

    使用高德接口获取城市天气数据

    将经纬度数据转换为中文地址

    2、按日期分表,每天保存当天数据:每天数据过大,希望能每天创建一个新的数据表,保存该天数据

    3、API取数-钉钉获取部门列表接口只能获取当前部门的下一级部门基础信息,不支持获取当前部门下所有层级子部门。因此需要依次根据父部门ID循环获取子部门ID

    4、API取数-使用通讯录同步获取企业微信userid和部门:使用的接口:获取成员ID列表

    5、API取数-北森接口获取员工任职信息:使用的接口:根据时间窗滚动查询变动的员工与单条任职信息

    参数进行分组后再从接口循环取数

    接口限制一次取数不能超过100,但实际场景中是超过100的

    以获取企微月报打卡数据为例:

    1. 获取成员ID接口需要的access_token,输出为参数

    2. 获取企业微信成员 userid 和 department

    3. 将 userid 分组并输出为参数

    4. 准备接口所需的参数,根据成员分组批量循环取数

    参数进行分组后再从接口循环取数

    接口取数+MD5加密

    使用MD5加密获取签名sign,从 API 接口取数

    参数使用MD5加密后从API取数

    接口取数、接口参数做的操作:

    • 为请求正文 Hash 摘要后再 base-16 编码的结果、

    • 使用签名认证

    • 使用 SparkSQL HMACSHA256函数

    使用FDL接口形式实现阿里云服务器数据监听

    分页取数:按页数取数,其中接口中存在参数:

    • pageIndex数据页数

    • pageSize:每一页的数据条数

    4.1.3 及之后版本:

    1. 将 pageSize 设置为 100,获取总页数,输出参数totalpages

    2. 使用数据同步节点,从第一页开始取数,页码大于 totalpages 时,终止取数

    4.1.3 之前版本:

    1. 将 pageSize 设置为 100,获取总页数,输出参数totalpages

    2. 使用循环容器和内置参数 loopTimes从第一页开始取数,当循环次数 loopTimes>total_pages 时,停止执行

    API取数-按页数取数

    分页取数,接口返回值中没有总页数 total_pages,需要手动计算

    请求参数:

    • pageNum:分页参数,数值可自定义

    • pageSize:每页数据条数,数值可自定义

    返回值参数:

    • totalNum:返回取出数据的总数据条数

    • pageSize:返回取出数据的每页数据条数


    4.1.3 及之后版本
    1. 将 pageSize 设置为 10,pageNum 为1,从第一页开始取数,取10条数据

    2. 根据返回值中的totalNum、pageSize,获取总页数  total_pages

    3. 使用数据同步节点,第一页开始递增 ${pageNum}页数参数,从接口取数当页数参数 ${pageNum} 递增到大于总页数参数,则${total_pages},则分页结束

    4.1.3 之前版本
    1. 将 pageSize 设置为 10,pageNum 为1,从第一页开始取数,取10条数据

    2. 根据返回值中的totalNum、pageSize,获取总页数  total_pages

    3. 拖入循环容器节点,循环容器节点中拖入数据同步节点;pageSize:10、pageNum 使用内置参数${loopTimes}(初次为 1),也就是按照每页 10 条数据,从第一页开始递增从接口取数

    循环执行条件为: loopTimes<=${total_pages}

    分页取数-计算总页数并按页取数

    分页取数,接口中没有页数相关的参数,但有:

    • limit:查询的数据条数,1-100,默认为10

    • data_id:上一次查询数据结果的最后一条数据的ID

    1. 为了从数据库中可以获得最大 id 作为参数,先随机取出 10 条数据落库

    2. 获取数据表中最大的 id 值作为参数

    3. 使用 id 值,每次从接口中取 100 条数据

    4. 找到每次执行的最后一行 id 值,输出为参数,若值为空,停止循环

    循环执行 2-4 步骤

    分页取数-限制取数量且无页数参数

    分页取数:按偏移量取数,接口参数如下:

    • FilterString:参数中使用日期区间作为参数,获取一段时间(开始时间和结束时间)作为日期参数,取出该段时间内的数据

    • StartRow:开始行索引

    • Limit每次取数的限制条数

    金蝶云星空销售报价单接口为例:

    4.1.3 及之后版本
    1. 获取开始时间和结束时间并输出为参数

    2. 使用数据同步节点,使用接口请求参数偏移量 StartRow 和每次的限制条数 Limit ,为 StartRow 赋值参数 ${offset},以 0 为初始值,增长间隔也就是 Limit 设置为 30,进行取数,也就是下一次循环则 offset 参数变为 30,如果最后一次取数返回的数据条数小于 Limit 限制 30,则此次数据就已经被取完,停止循环

    4.1.3 之前版本
    1. 获取开始时间和结束时间并输出为参数

    2. 设置 limit 为 30(值可自定义),并输出为参数

    3. 为了保证本次取数的纯净,删除目标数据表中本次取数的日期参数区间内的数据

    4. 计算指定日期区间中目标数据表数据除以 limit 参数的余数,将余数输出为参数,若为0,则表示目标表数据能被整除,表示还有未读取的接口数据,因此需要继续写入数据;若余数不为 0,则表示已经取出了指定日期中的所有接口数据,需要停止取数

    5. 若需要继续写入数据,获取每次循环开始行数,即获取每次循环请求参数 StartRow 的开始位置

    6. 使用开始时间 STARDATE 、结束时间 ENDDATE、Limit、startrow 从接口取数

    循环执行 4-6 步骤


    分页取数-按偏移量取数


    分页取数:按偏移量取数,接口参数如下:

    • StartRow:开始行索引

    • Limit:每次取数的限制条数

    返回参数:

    Result.RowCount返回所取数据的总行数

    4.1.3 及之后版本,可参考:分页取数-按偏移量取数 实现

    4.1.3 之前版本,可参考:API取数-以起始行数作为参数 方案实现

    分页取数+游标

    Body 参数:

    • cursor:分页查询的游标,最开始传0,后续传返回参数中的next_cursor值

    返回参数:

    • has_more:是否还有更多数据,true 为有,false 为没有

    • next_cursor:下一次分页的游标(如果has_more为false,表示没有更多的分页数据)

    分页取数-分页方式为游标

    分页取数+加密

    分页取数,调用接口时需要携带签名参数 sign,只有当 sign 值合法时请求才会被接受

    1. 使用 SHA2 加密签名 sign,并输出为参数

    2. 将每页数据限制为100条,获取总页数,输出参数totalpages(该过程使用到了加密sign

    3. 使用循环容器和内置参数 loopTimes从第一页开始取数,当循环次数 loopTimes>total_pages 时,停止执行(该过程使用到了加密sign

    API取数-SHA2加密身份验证&按页数取数

    嵌套循环取数

    循环容器根据参数A循环取数

    循环容器内,分页取数

    以 慧策-WMS库存全量查询接口 取数为例:

    4.1.3 及之后版本
    1. 仓库编码输出为参数

    2. 循环容器遍历仓库编码参数,循环容器中拖入数据同步节点,分页取数

    4.1.3 之前版本

    有些复杂,详情请参考文档:方案二

    嵌套循环取数
    使用接口进行条件判断

    用户希望定时任务仅在工作日运行

    仅在工作日执行定时任务
    用户想使用「参数赋值」+「循环容器」节点,分段取出 API 接口中的数据,并将数据解析;但当某个参数从 API 接口中取的数据,经解析后,为空时(没有任何内容),将终止循环,可参考右侧文档解决这个问题取出数据为空导致循环终止解决方案

    3. 拓展阅读

    1)如果需加工、融合后的数据封装并发布为规范化 API 接口数据,供外部系统调用,实现数据价值输出及共享开放。详情参见:数据服务概述

    最佳实践请参考:使用数据服务对数据进行分发管控

    2)如果需要将多应用系统的数据通过 FDL 打通,实现业务系统间的数据交互(交互的形式为API)。比如系统中数据取出并分析后,希望直接把分析结果数据推送到业务系统中(以 API 的形式),形成业务系统里面需要直接处理的业务数据,打通分析到业务的流程。详情参见:API输出逻辑说明

    最佳实践请参考:活动日程信息更新至企业微信日程新增/修改宜搭表单数据



    附件列表


    主题: 数据开发
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持