RestAPI數據源為您提供讀取和寫入RestAPI雙向通道的功能,本文為您介紹DataWorks的RestAPI數據同步的能力支持情況。
使用限制
目前該數據源僅支持獨享數據集成資源組。
目前不支持設置超時參數,當前DataWorks內置的請求超時時間是60s, 如果您的API查詢返回時間超過60s將導致任務失敗。
支持的字段類型
類型分類 | 數據集成column配置類型 |
整數類 | LONG,INT |
字符串類 | STRING |
浮點類 | DOUBLE,FLOAT |
布爾類 | BOOLEAN |
日期時間類 | DATE |
創建數據源
在進行數據同步任務開發時,您需要在DataWorks上創建一個對應的數據源,操作流程請參見創建并管理數據源,詳細的配置參數解釋可在配置界面查看對應參數的文案提示。
數據同步任務開發
數據同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過向導模式配置離線同步任務、通過腳本模式配置離線同步任務。
腳本模式配置的全量參數和腳本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",
"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"http://限流,此處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"http://從a.c路徑中查找數據}] 對于您指定的column信息,type和name必須填寫。 | 是 | 無 |
dataPath | 從返回結果中查詢單個JSON對象或者JSON數組的路徑。 | 否 | 無 |
method | 請求方法,支持get或post兩種方式。 | 是 | 無 |
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"http://限流,此處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"http://放置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 |