您可以创建RestAPI数据源,将RESTful接口中的JSON数据以同步任务的方式写入其他数据源(如MaxCompute);同时,RestAPI数据源也支持作为目的端,用以接收来自其他数据源的数据。本文为您介绍DataWorks的RestAPI数据同步的能力支持情况。
使用限制
-
目前该数据源仅支持Serverless资源组和独享数据集成资源组。
-
目前不支持设置超时参数,当前DataWorks内置的请求超时时间是60s。如果您的API查询返回时间超过60s将导致任务失败。
支持的字段类型
数据同步至目的端时,仅支持单层表结构,无法支持嵌套字段结构。例如,API返回结构为{data: {user: { id: 1, name:'lily'},value: 123}},同步至目的端,字段只能处理成并列的user_id、user_name和value。
|
类型分类 |
数据集成column配置类型 |
|
整数类 |
LONG,INT |
|
字符串类 |
STRING |
|
浮点类 |
DOUBLE,FLOAT |
|
布尔类 |
BOOLEAN |
|
日期时间类 |
DATE |
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见数据源管理,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据源认证配置
RestAPI数据源支持以下三种验证方法:
-
No Auth:无需验证,直接访问API。适用于不需要身份认证的公开接口。
-
Basic Auth:通过用户名和密码进行验证。选择此方式后,在配置界面填写用户名和密码即可。
-
Token Auth:通过Token进行验证。选择此方式后,在配置界面的token字段中填写从第三方API获取的access_token。
DataWorks不提供获取第三方API Token的内置工具。如果您的第三方API使用OAuth2.0等Token认证方式,您需要自行从API提供方获取access_token。以下为使用curl获取Token的示例命令:
curl -X POST https://api.example.com/oauth/token \
-d 'grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET'
获取到Token后,在新增RestAPI数据源时,将验证方法设置为Token Auth,并将Token填入对应字段。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
-
脚本模式配置的全量参数和脚本Demo请参见下文的附录:脚本Demo与参数说明。
实操案例
常见问题
-
只能指定好请求数据的翻页次数吗?
-
解答:是的。
-
-
是否支持自动翻页,例如当请求参数后面没数据时便停止翻页。
-
解答:不支持, 否则无法进行split切分。
-
-
如果需要指定翻页次数,但指定翻页次数比实际页数多,导致后面数据为空,系统会如何处理?
-
解答:当后面页数数据为空时,相当于SQL查询到空数据,系统将会继续查询下一条数据。
-
-
只支持解析一层JSON据吗?
-
解答:是的,不会进行深入解析。
-
-
DataWorks数据集成RestAPI非数组类型如何配置?
-
解答:确保在
reader的parameter中,将dataPath设置为指向非数组类型数据的路径,例如:dataPath:"data.list"。这将帮助插件正确地定位到您要读取的数据字段。接下来,将dataMode设置为multiData。这意味着DataWorks将把数据作为多个单独的记录来处理,即使它们在源数据中并非数组形式。说明请注意,在
multiData模式下,column配置不再适用。您应直接在dataPath中指定要读取的数据路径。以下是DataWorks数据集成RestAPI非数组类型的配置示例:
reader: { name: "restapi", parameter: { dataPath: "data.list", dataMode: "multiData", // 其他参数 } }
-
附录:脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见脚本模式配置,以下为您介绍脚本模式下数据源的参数配置详情。
Reader脚本Demo
-
脚本示例如下:
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"restapi", "parameter":{ "url":"http://127.0.0.1:5000/get_array5", "dataMode":"oneData", "responseType":"json", "column":[ { "type":"long", "name":"a.b" //从a.b路径中查找数据 }, { "type":"string", //从a.c路径中查找数据 "name":"a.c" } ], "dirtyData":"null", "method":"get", "socketTimeout":"60000", "defaultHeader":{ "X-Custom-Header":"test header" }, "customHeader":{ "X-Custom-Header2":"test header2" }, "parameters":"abc=1&def=1" }, "name":"restapireader", "category":"reader" }, { "stepType":"stream", "parameter":{ }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"" }, "speed":{ "throttle":true, //当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。 "concurrent":1, //作业并发数。 "mbps":"12"//限流,此处1mbps = 1MB/s。 } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } } -
脚本模式配置说明如下:
Restapi插件发出http(s)请求后,会获得请求响应body(body是一个json),dataPath用来配置从body中提取数据的json path路径。举2个示例如下: 以接口返回数据body如下举例,其中业务数据在DATA内,且接口一次返回了多行数据(DATA是一个数组): { "HEADER": { "BUSID": "bid1", "RECID": "uuid", "SENDER": "dc", "RECEIVER": "pre", "DTSEND": "202201250000" }, "DATA": [ { "SERNR": "sernr1" }, { "SERNR": "sernr2" } ] } 如果需要将DATA中的多行数据抽取为多条同步记录,则需要将 column 配置为 "column": [ "SERNR" ],dataMode 配置为 "dataMode": "multiData",dataPath 配置为 "dataPath": "DATA" 以接口返回数据body如下举例,其中业务数据在content.DATA内,且接口一次返回了1行数据(DATA是一个对象): { "HEADER": { "BUSID": "bid1", "RECID": "uuid", "SENDER": "dc", "RECEIVER": "pre", "DTSEND": "202201250000" }, "content": { "DATA": { "SERNR": "sernr2" } } } 如果需要将content.DATA中的一行数据抽取为一条同步记录,则需要将 column 配置为 "column": [ "SERNR" ],dataMode 配置为 "dataMode": "oneData",dataPath 配置为 "dataPath": "content.DATA"
Reader脚本参数
以下的参数包含在添加数据源和配置数据集成任务节点的过程中。
当前插件暂不支持使用调度参数。
|
参数 |
描述 |
是否必选 |
默认值 |
|
url |
RESTful接口地址。 |
是 |
无 |
|
dataMode |
RESTful请求返回的结果JSON数据的格式。
|
是 |
无 |
|
responseType |
返回结果的数据格式,目前仅支持JSON格式。 |
是 |
JSON |
|
column |
读取字段列表,type指定源数据的类型,name指定当前column数据获取的JSON路径。您可以指定column字段信息,配置如下。 "column":[{"type":"long","name":"a.b" //从a.b路径中查找数据},{"type":"string","name":"a.c"//从a.c路径中查找数据}] 对于您指定的column信息,type和name必须填写。 |
是 |
无 |
|
dataPath |
从返回结果中查询单个JSON对象或者JSON数组的路径。 |
否 |
无 |
|
method |
请求方法,支持get或post两种方式。 |
是 |
无 |
|
socketTimeout |
访问RESTful接口数据socket超时参数,单位毫秒。 |
否 |
60000 |
|
customHeader |
传递给RESTful接口的header信息。 |
否 |
无 |
|
parameters |
传递给RESTful接口的参数信息。
|
否 |
无 |
|
dirtyData |
当从指定的column json路径中找不到数据时的处理方式。
|
是 |
dirty |
|
requestTimes |
从RESTful地址中请求数据的次数。
|
是 |
single |
|
requestParam |
若requestTimes设为multiple时,需要指定循环的参数,例如pageNumber,插件会根据设置的startIndex、endIndex、step三个参数循环传递pageNumber参数给RESTful接口,进行多次请求。 |
否 |
无 |
|
startIndex |
循环请求的起点,起点包含在循环请求之内。 |
否 |
无 |
|
endIndex |
循环请求的终点,终点包含在循环请求之内。 |
否 |
无 |
|
step |
循环请求的步长。 |
否 |
无 |
|
authType |
验证方法。包括:
|
否 |
无 |
|
authUsername/authPassword |
Basic Auth验证的用户名和密码。 |
否 |
无 |
|
authToken |
Token Auth验证的token。 |
否 |
无 |
|
accessKey/accessSecret |
Aliyun API签名验证的账户信息。 |
否 |
无 |
Writer脚本Demo
{
"type":"job",
"version":"2.0",
"steps":[
{
"stepType":"stream",
"parameter":{
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"restapi",
"parameter":{
"url":"http://127.0.0.1:5000/writer1",
"dataMode":"oneData",
"responseType":"json",
"column":[
{
"type":"long", //放置column数据到路径a.b
"name":"a.b"
},
{
"type":"string", //放置column数据到路径a.c
"name":"a.c"
}
],
"method":"post",
"defaultHeader":{
"X-Custom-Header":"test header"
},
"customHeader":{
"X-Custom-Header2":"test header2"
},
"parameters":"abc=1&def=1",
"batchSize":256
},
"name":"restapiwriter",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0" //错误记录数。
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1, //作业并发数。
"mbps":"12"//限流,此处1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer脚本参数
|
参数 |
描述 |
是否必须 |
默认值 |
|
url |
RESTful接口地址。 |
是 |
无 |
|
dataMode |
RESTful请求传递的JSON数据的格式。
|
是 |
无 |
|
column |
生成JSON数据对应的字段路径列表,type指定源数据的类型,name指定当前column数据放置的JSON路径。您可以指定column字段信息,配置如下。 "column":[{"type":"long","name":"a.b" //放置column数据到路径a.b},{"type":"string","name":"a.c"//放置column数据到路径a.c}] 说明
对于您指定的column信息,type和name必须填写。 |
是 |
无 |
|
dataPath |
数据结果放置的JSON对象的路径。 |
否 |
无 |
|
method |
请求方法,支持post和put。 |
是 |
无 |
|
customHeader |
传递给RESTful接口的header信息。 |
否 |
无 |
|
authType |
验证方法。
|
否 |
无 |
|
authUsername/authPassword |
Basic Auth验证的用户名密码。 |
否 |
无 |
|
authToken |
Token Auth验证的token。 |
否 |
无 |
|
accessKey/accessSecret |
Aliyun API签名验证的账户信息。 |
否 |
无 |
|
batchSize |
dataMode为multiData时,一次请求最大的数据条数。 |
是 |
512 |