全部產品
Search
文件中心

DataWorks:RestAPI Reader最佳實務

更新時間:Dec 31, 2024

Data IntegrationRestAPI Reader外掛程式提供了讀取RESTful介面資料的能力,通過配置HTTP請求地址,可擷取RestAPI類型的資料來源資料(例如擷取時間範圍內的資料、擷取分頁資料、迴圈請求參數擷取資料等),並轉換為Data Integration支援的資料類型,傳遞給下遊Writer外掛程式。本文為您舉例介紹常見的RestAPI資料來源使用樣本。

說明

背景資訊

DataWorksData IntegrationRestAPI Reader在讀取資料和返回讀取結果的能力如下。

維度

能力支援

傳回值類型

當前僅支援JSON格式的返回結果。

讀取資料類型

支援讀取INT、BOOLEAN、DATE、DOUBLE、FLOAT、LONG、STRING資料類型。

請求方式

支援要求方式為GET和POST的HTTP介面。

認證方式

支援無認證或者以下三種驗證方式:Basic Auth、Token Auth和Aliyun API Signature。您可以根據資料來源API實際支援的驗證方式選擇對應的驗證方式並配置驗證參數。

  • Basic Auth:基礎驗證。

    如果資料來源API支援使用者名稱和密碼的方式進行驗證,您可選擇此種驗證方式,並在選擇完成後配置用於驗證的使用者名稱和密碼,後續Data Integration過程中對接資料來源時,通過Basic Auth協議傳遞給RESTful地址,完成驗證。

  • Token Auth:Token驗證。

    如果資料來源API支援Token的方式進行驗證,您可選擇此種驗證方式,並在選擇完成後配置用於驗證的固定Token值,後續Data Integration過程中對接資料來源時,通過傳入header中進行驗證,例如:{"Authorization":"Bearer TokenXXXXXX"}。

    說明

    當您需要使用自訂加密方式時,可以考慮使用Token認證方式,將加密後的認證資訊作為AuthToken提供。

實踐1:讀取一個介面資料,該介面根據時間範圍查詢資料

樣本情境:介面定義

本實踐樣本的情境為讀取一個RESTful介面資料並寫入一個MaxCompute分區表中,其中使用的樣本RESTful介面為一個自建的測試GET介面,會根據介面輸入的時間範圍參數返回該時間範圍內讀取到的資料。本樣本的介面詳情如下。

說明

您實際操作時,可根據您使用的介面調整相關配置,本樣本的介面僅作為本實踐的樣本,為您示範實踐的操作流程。

  • 介面請求樣本:

    http://TestAPIAddress:Port/rest/test2?startTime=<StartTime>&endTime=<EndTime>

    其中startTime和endTime為請求參數,表示讀取資料的時間範圍。

  • 返回結果樣本:

    {
        "status": "success",
        "totalNum": 187,
        "data": [
            {
                "axis": "series1",
                "value": 9191352,
                "createTime": "2023-01-04 00:07:20"
            },
            {
                "axis": "series1",
                "value": 6645322,
                "createTime": "2023-01-04 00:14:47"
            },
            {
                "axis": "series1",
                "value": 2078369,
                "createTime": "2023-01-04 00:22:13"
            },
            {
                "axis": "series1",
                "value": 7325410,
                "createTime": "2023-01-04 00:29:30"
            },
            {
                "axis": "series1",
                "value": 7448456,
                "createTime": "2023-01-04 00:37:04"
            },
            {
                "axis": "series1",
                "value": 5808077,
                "createTime": "2023-01-04 00:44:30"
            },
            {
                "axis": "series1",
                "value": 5625821,
                "createTime": "2023-01-04 00:52:06"
            }
        ]
    }

    其中data為返回的資料存放區路徑,讀取到的資料有3個欄位:axisvaluecreateTime

  • 介面測試載入器調用樣本:apirest2

準備工作:建立MaxCompute分區表

本實踐將從介面處讀取的資料同步至MaxCompute分區表中,因此首先需要建立一張用於儲存同步過來的資料的分區表。

說明

分區表配合覆蓋寫命令,可以實現分區覆蓋寫的效果,讓資料同步任務具備可重跑性,重跑時資料不會重複,並且在進一步做資料分析時,分區表也更易於資料分析。

建表語句如下。

CREATE TABLE IF NOT EXISTS ods_xiaobo_rest2
(
  `axis`  STRING
  ,`value` BIGINT
  ,`createTime` STRING
)
PARTITIONED BY
(
  ds  STRING
)
LIFECYCLE 3650;

如果您使用的是標準版的DataWorks,並將建立的分區表提交到生產環境,後續您可以在資料地圖中查看到建立的此表。

配置同步任務

  1. 添加RestAPI資料來源。

    在DataWorks的工作空間中添加一個RestAPI類型的資料來源,操作詳情請參見配置RestAPI資料來源image.png核心配置要點如下。

    • url:配置為RESTful介面的地址。

    • 驗證方法:您可以根據資料來源API實際支援的驗證方式選擇對應的驗證方式並配置驗證參數。

    • 資源群組連通性:RestAPI資料來源僅支援使用獨享Data Integration資源群組,您需要選擇一個獨享Data Integration資源群組,測試資料來源與此資源群組的連通性。

  2. 建立離線同步節點並配置同步任務。

    在DataWorks的DataStudio中建立一個離線同步節點,操作詳情請參見通過嚮導模式配置離線同步任務,其中核心配置要點如下。

    • 資料來源配置要點:

      • 資料來源:選擇上述步驟中建立的RestAPI資料來源。

      • 請求Method:本樣本介面為GET介面,此處選擇GET

      • 返回資料結構:本樣本介面的返回結果為一個JSON數組,此處選擇數組資料

      • 資料存放區json路徑:本樣本介面擷取的資料存放區於data下,此處配置為data

      • 請求參數:請求參數與調度參數搭配使用,實現每天同步當天資料的。

        • 請求參數配置為startTime=${extract_day} ${start_time}&endTime=${extract_day} ${end_time}

        • 後續調度配置的調度參數中,新增三個調度參數:extract_day=${yyyy-mm-dd}start_time=00:00:00end_time=23:59:59

        假設運行日期為2023-01-05,則extract_day取值為2023-01-04,請求參數將拼接為:startTime=2023-01-04 00:00:00&endTime=2023-01-04 23:59:59

    • 資料去向配置要點:

      • 資料來源:選擇上述步驟中建立的MaxCompute分區表。

      • 分區資訊:分區資訊和調度參數搭配使用。

        • 分區資訊配置為${bizdate}

        • 後續調度配置的調度參數中,新增1個調度參數:bizdate=$bizdate

        假設運行日期為2023-01-05,則分區資訊的取值為20230104。

    • 欄位對應配置要點:根據介面中的資料定義,填寫RestAPI介面中的欄位,注意欄位名為大小寫敏感。添加好欄位後,可以使用同名映射或者手動連線的方式,建立列映射。

測試回合

本實踐使用了調度參數,因此完成離線同步任務的配置後,您可以在離線同步節點頁面頂部單擊帶參運行,根據介面提示填寫測試的調度參數取值,進行離線同步任務測試。帶參運行測試回合完成後,您可以在介面下方查看運行議程,檢查調度參數取值是否符合預期。

資料檢查

您可以在DataStudio的臨時查詢中查看資料是否正確同步到了MaxCompute,臨時查詢的樣本語句如下。

select * from ods_xiaobo_rest2 where ds='20230104' order by createtime;

其中ods_xiaobo_rest2為上述步驟中建立的MaxCompute分區表,20230104為測試回合時的分區取值。

運行完成後,您可以在下方的查詢結果處查看資料是否正確同步到了MaxCompute。結果1

提交發布與補資料

測試回合與資料檢查完成後,您可將離線同步任務提交發布到生產環境,操作詳情請參見標準模式工作空間任務發布流程提交發布提交發布成功後,您可以在DataWorks的營運中心中找到這個周期任務,此時可通過補資料的方式,將歷史時間段內的資料補上。補資料的功能介紹和操作指導請參見執行補資料並查看補資料執行個體(新版)

實踐2:讀取一個介面資料,該介面為一個分頁的RestAPI介面

樣本情境:介面定義

本實踐樣本的情境為讀取一個RESTful介面資料並寫入一個MaxCompute分區表中,其中使用的樣本RESTful介面為一個自建的測試GET介面,本樣本的介面詳情如下。

說明

您實際操作時,可根據您使用的介面調整相關配置,本樣本的介面僅作為本實踐的樣本,為您示範實踐的操作流程。

  • 介面請求樣本:

    http://TestAPIAddress:Port/rest/test1?pageSize=5&pageNum=1

    其中pageSize和pageNum為請求參數,表示頁長和頁號。

  • 返回結果樣本:

    {
        "status": "success",
        "totalNum": 304,
        "data": [
            {
                "id": 6,
                "name": "測試使用者6"
            },
            {
                "id": 7,
                "name": "測試使用者7"
            },
            {
                "id": 8,
                "name": "測試使用者8"
            },
            {
                "id": 9,
                "name": "測試使用者9"
            },
            {
                "id": 10,
                "name": "測試使用者10"
            }
        ]
    }

    其中data為返回的資料存放區路徑,讀取到的資料有2個欄位:idname

  • 介面測試載入器調用樣本:apirest1

準備工作:建立MaxCompute分區表

本實踐將從介面處讀取的資料同步至MaxCompute分區表中,因此首先需要建立一張用於儲存同步過來的資料的分區表。

說明

分區表配合覆蓋寫命令,可以實現分區覆蓋寫的效果,讓資料同步任務具備可重跑性,重跑時資料不會重複,並且在進一步做資料分析時,分區表也更易於資料分析。

建表語句如下。

CREATE TABLE IF NOT EXISTS ods_xiaobo_rest1
(
  `id` BIGINT
  ,`name` STRING
)
PARTITIONED BY
(
  ds  STRING
)
LIFECYCLE 3650;

如果您使用的是標準版的DataWorks,並將建立的分區表提交到生產環境,後續您可以在資料地圖中查看到建立的此表。

配置同步任務

  1. 添加RestAPI資料來源。

    在DataWorks的工作空間中添加一個RestAPI類型的資料來源,操作詳情請參見配置RestAPI資料來源image.png核心配置要點如下。

    • url:配置為RESTful介面的地址。

    • 驗證方法:您可以根據資料來源API實際支援的驗證方式選擇對應的驗證方式並配置驗證參數。

    • 資源群組連通性:RestAPI資料來源僅支援使用獨享Data Integration資源群組,您需要選擇一個獨享Data Integration資源群組,測試資料來源與此資源群組的連通性。

  2. 建立離線同步節點並配置同步任務。

    在DataWorks的DataStudio中建立一個離線同步節點,操作詳情請參見通過嚮導模式配置離線同步任務,其中核心配置要點如下。

    • 資料來源配置要點:

      • 資料來源:選擇上述步驟中建立的RestAPI資料來源。

      • 請求Method:本樣本介面為GET介面,此處選擇GET

      • 返回資料結構:本樣本介面的返回結果為一個JSON數組,此處選擇數組資料

      • 資料存放區json路徑:本樣本介面擷取的資料存放區於data下,此處配置為data

      • 請求參數:頁長固定,此處配置為pageSize=50,建議不要單頁特別大,會給RestAPI服務端和同步任務帶來壓力。

      • 請求次數:本樣本選擇多次請求

        本介面的分頁參數是pageNum,選擇多次請求後,下方的相關參數配置為:

        • 多次請求對應參數:配置為pageNum。

        • StartIndex:配置為1。

        • Step:配置為1。

        • EndIndex:配置為100。

    • 資料去向配置要點:

      • 資料來源:選擇上述步驟中建立的MaxCompute分區表。

      • 分區資訊:分區資訊和調度參數搭配使用。

        • 分區資訊配置為${bizdate}

        • 後續調度配置的調度參數中,新增1個調度參數:bizdate=$bizdate

        假設運行日期為2023-01-05,則分區資訊的取值為20230104。

    • 欄位對應配置要點:根據介面中的資料定義,填寫RestAPI介面中的欄位,注意欄位名為大小寫敏感。添加好欄位後,可以使用同名映射或者手動連線的方式,建立列映射。

測試回合

本實踐使用了調度參數,因此完成離線同步任務的配置後,您可以在離線同步節點頁面頂部單擊帶參運行,根據介面提示填寫測試的調度參數取值,進行離線同步任務測試。帶參運行測試回合完成後,您可以在介面下方查看運行議程,檢查調度參數取值是否符合預期。

資料檢查

您可以在DataStudio的臨時查詢中查看資料是否正確同步到了MaxCompute,臨時查詢的樣本語句如下。

select * from ods_xiaobo_rest1 where ds='20230104' order by id;

其中ods_xiaobo_rest1為上述步驟中建立的MaxCompute分區表,20230104為測試回合時的分區取值。

運行完成後,您可以在下方的查詢結果處查看資料是否正確同步到了MaxCompute。結果1

實踐3:讀取一個介面資料,該介面為POST類型的RestAPI介面

樣本情境:介面定義

本實踐樣本的情境為讀取一個RESTful介面資料並寫入一個MaxCompute分區表中,其中使用的樣本RESTful介面為一個自建的測試POST介面,本樣本的介面詳情如下。

說明

您實際操作時,可根據您使用的介面調整相關配置,本樣本的介面僅作為本實踐的樣本,為您示範實踐的操作流程。

  • 介面請求樣本:

    http://TestAPIAddress:Port/rest/test3

    requestBody的格式為JSON。

    {
      "userId":16,
      "startTime":"2023-01-04 00:00:00",
      "endTime":"2023-01-04 23:59:59"
    }
  • 返回結果樣本:

    {
        "status": "success",
        "totalNum": 289,
        "data": [
            {
                "user": {
                    "id": 16,
                    "name": "使用者16"
                },
                "axis": "series1",
                "value": 8231053,
                "createTime": "2023-01-04 00:04:57"
            },
            {
                "user": {
                    "id": 16,
                    "name": "使用者16"
                },
                "axis": "series1",
                "value": 6519928,
                "createTime": "2023-01-04 00:09:51"
            },
            {
                "user": {
                    "id": 16,
                    "name": "使用者16"
                },
                "axis": "series1",
                "value": 2915920,
                "createTime": "2023-01-04 00:14:36"
            },
            {
                "user": {
                    "id": 16,
                    "name": "使用者16"
                },
                "axis": "series1",
                "value": 7971851,
                "createTime": "2023-01-04 00:19:51"
            },
            {
                "user": {
                    "id": 16,
                    "name": "使用者16"
                },
                "axis": "series1",
                "value": 6598996,
                "createTime": "2023-01-04 00:24:30"
            }
        ]
    }

    其中data為返回的資料存放區路徑,讀取到的資料有5個欄位:user.iduser.nameaxisvaluecreateTime

  • 介面測試載入器調用樣本:apirest3

準備工作:建立MaxCompute分區表

本實踐將從介面處讀取的資料同步至MaxCompute分區表中,因此首先需要建立一張用於儲存同步過來的資料的分區表。

說明

分區表配合覆蓋寫命令,可以實現分區覆蓋寫的效果,讓資料同步任務具備可重跑性,重跑時資料不會重複,並且在進一步做資料分析時,分區表也更易於資料分析。

建表語句如下。

CREATE TABLE IF NOT EXISTS ods_xiaobo_rest3
(
  `user_id` BIGINT
  ,`name` STRING
  ,`axis`  STRING
  ,`value` BIGINT
  ,`create_time` STRING
)
PARTITIONED BY
(
  ds  STRING
)
LIFECYCLE 3650;

如果您使用的是標準版的DataWorks,並將建立的分區表提交到生產環境,後續您可以在資料地圖中查看到建立的此表。

配置同步任務

  1. 添加RestAPI資料來源。

    在DataWorks的工作空間中添加一個RestAPI類型的資料來源,操作詳情請參見配置RestAPI資料來源image.png核心配置要點如下。

    • url:配置為RESTful介面的地址。

    • 驗證方法:您可以根據資料來源API實際支援的驗證方式選擇對應的驗證方式並配置驗證參數。

    • 資源群組連通性:RestAPI資料來源僅支援使用獨享Data Integration資源群組,您需要選擇一個獨享Data Integration資源群組,測試資料來源與此資源群組的連通性。

  2. 建立離線同步節點並配置同步任務。

    在DataWorks的DataStudio中建立一個離線同步節點,操作詳情請參見通過嚮導模式配置離線同步任務,其中核心配置要點如下。

    • 資料來源配置要點:

      • 資料來源:選擇上述步驟中建立的RestAPI資料來源。

      • 請求Method:本樣本介面為POST介面,此處選擇POST

      • 返回資料結構:本樣本介面的返回結果為一個JSON數組,此處選擇數組資料

      • 資料存放區json路徑:本樣本介面擷取的資料存放區於data下,此處配置為data

      • Header:本樣本的POST介面接受的請求體是JSON格式的,此處配置為{"Content-Type":"application/json"}

      • 請求參數:請求參數與調度參數搭配使用,實現每天同步當天資料的。

        • 請求參數配置為

          {
          
              "userId":16,
          
              "startTime":"${extract_day} 00:00:00",
          
              "endTime":"${extract_day} 23:59:59"
          
          }
        • 後續調度配置的調度參數中,新增1個調度參數:extract_day=${yyyy-mm-dd}

    • 資料去向配置要點:

      • 資料來源:選擇上述步驟中建立的MaxCompute分區表。

      • 分區資訊:分區資訊和調度參數搭配使用。

        • 分區資訊配置為${bizdate}

        • 後續調度配置的調度參數中,新增1個調度參數:bizdate=$bizdate

        假設運行日期為2023-01-05,則分區資訊的取值為20230104。

    • 欄位對應配置要點:根據介面中的資料定義,填寫RestAPI介面中的欄位,多個欄位可以使用英文點號分隔,注意欄位名為大小寫敏感。添加好欄位後,可以使用同名映射或者手動連線的方式,建立列映射。

測試回合

本實踐使用了調度參數,因此完成離線同步任務的配置後,您可以在離線同步節點頁面頂部單擊帶參運行,根據介面提示填寫測試的調度參數取值,進行離線同步任務測試。帶參運行測試回合完成後,您可以在介面下方查看運行議程,檢查調度參數取值是否符合預期。

資料檢查

您可以在DataStudio的臨時查詢中查看資料是否正確同步到了MaxCompute,臨時查詢的樣本語句如下。

select * from ods_xiaobo_rest3 where ds='20230105' order by create_time;

其中ods_xiaobo_rest3為上述步驟中建立的MaxCompute分區表,20230105為測試回合時的分區取值。

運行完成後,您可以在下方的查詢結果處查看資料是否正確同步到了MaxCompute。結果3

實踐4:迴圈某請求參數讀取RestAPI介面

樣本情境:介面定義

本實踐樣本的情境為迴圈讀取RESTful介面資料並寫入一個MaxCompute分區表中,其中使用的樣本RESTful介面為一個自建的測試GET介面,會根據日期(date)、省份(province)、城市(city)入參返回相關的溫度資料。

說明

您實際操作時,可根據您使用的介面調整相關配置,本樣本的介面僅作為本實踐的樣本,為您示範實踐的操作流程。

  • 請求樣本:

    http://TestAPIAddress:Port/rest/test5?date=2023-01-04&province=zhejiang&city=hangzhou
  • 返回樣本:

    {
      "province": "P1",
      "city": "hz",
      "date": "2023-01-04",
      "minTemperature": "-14",
      "maxTemperature": "-7",
      "unit": "℃",
      "weather": "cool"
    }
  • 介面測試載入器調用樣本:image.png

準備工作:建立參數表和MaxCompute分區表

本實踐將從介面處讀取的資料同步至MaxCompute分區表中,因此首先需要建立一張參數表,用於儲存需要迴圈的province、city,再建立一張用於儲存同步過來的資料的分區表。

說明

分區表配合覆蓋寫命令,可以實現分區覆蓋寫的效果,讓資料同步任務具備可重跑性,重跑時資料不會重複,並且在進一步做資料分析時,分區表也更易於資料分析。

建表語句如下:

建立參數表

CREATE TABLE IF NOT EXISTS `citys`
(
  `province` STRING ,
  `city` STRING
);

insert into citys
select 'shanghai','shanghai'
union all select 'zhejiang','hangzhou'
union all select 'sichuan','chengdu';

建立MaxCompute分區表

CREATE TABLE IF NOT EXISTS ods_xiaobo_rest5
(
    `minTemperature` STRING ,
    `maxTemperature` STRING ,
    `unit` STRING ,
    `weather` STRING 
)
PARTITIONED BY 
(
    `province` STRING ,
    `city` STRING ,
    `ds`  STRING
)
LIFECYCLE 3650;

如果您使用的是標準版的DataWorks,並將建立的表提交到生產環境,後續您可以在資料地圖中查看到建立的此表。

配置同步任務

  1. 添加RestAPI資料來源。

    在DataWorks的工作空間中添加一個RestAPI類型的資料來源,操作詳情請參見配置RestAPI資料來源image.png核心配置要點如下:

    • url:配置為RESTful介面的地址。

    • 驗證方法:您可以根據資料來源API實際支援的驗證方式選擇對應的驗證方式並配置驗證參數。

    • 資源群組連通性:選擇指定的資源群組,並進行連通性測試。

  2. 資料開發中建立賦值節點setval_citys。具體操作,請參見賦值節點image.png

    核心配置要點如下:

    序號

    說明

    • 賦值語言:ODPS SQL

    • 賦值代碼:

      SELECT  province
              ,city
      FROM    citys;

    重跑屬性:配置為運行成功或失敗後皆可重跑

    配置完成後提交發布賦值節點。

  3. 資料開發中建立for-each節點。具體操作,請參見for-each節點image.png核心配置要點如下:

    序號

    說明

    重跑屬性:配置為運行成功或失敗後皆可重跑

    依賴的上遊節點:選擇前面步驟的節點,即setval_citys節點。

    節點上下文參數:選擇輸入參數的來源。

    離線同步節點:配置for-each內部離線同步節點,詳情請參見下面步驟。

  4. 建立離線同步節點並配置同步任務。具體操作,請參見通過嚮導模式配置離線同步任務image.png

    核心配置要點如下:

    序號

    說明

    調度參數配置如下:

    bizdate=$[yyyymmdd-1] 
    bizdate_year=$[yyyy-1] 
    bizdate_month=$[mm-1] 
    bizdate_day=$[dd-1]

    配置RestAPI請求參數。其中province、city參數來自迴圈節點。

    date=${bizdate_year}-${bizdate_month}-${bizdate_day}&province=${dag.foreach.current[0]}&city=${dag.foreach.current[1]}

    配置MaxCompute分區參數,其中province參數來自迴圈節點。

    province=${dag.foreach.current[0]}

    配置MaxCompute分區參數,其中city參數來自迴圈節點。

    city=${dag.foreach.current[1]}

    配置MaxCompute分區參數,其中ds參數來自調度參數。

    ds=${bizdate}

    根據介面中的資料定義,填寫RestAPI中的欄位,注意欄位名為大小寫敏感。添加好欄位後,可以使用同名映射或者手動連線的方式,建立列映射。

    配置完成後提交發布for-each節點。

測試回合

  1. 在成功提交發布賦值節點和for-each節點後,在營運中心的周期任務中,對賦值節點進行補資料操作。具體操作,請參見執行補資料並查看補資料執行個體(新版)image.png

  2. 選擇補資料的業務日期,選中啟動並執行節點。image.png

  3. 任務運行後,在作業記錄中查看調度參數渲染是否符合預期。image.png

    如圖中所示,調度參數渲染正確,資料將被寫入MaxCompute表的province=shanghai,city=shanghai,ds=20231215分區中。

資料檢查

您可以在資料開發的臨時查詢功能中查看資料是否正確同步到了MaxCompute,臨時查詢的樣本如下:

樣本中ods_xiaobo_rest5為上述準備工作中建立的MaxCompute分區表。

SELECT  weather
        ,mintemperature
        ,maxtemperature
        ,unit
        ,province
        ,city
        ,ds
FROM    ods_xiaobo_rest5
WHERE   ds != 1
ORDER BY ds,province,city;

運行完成後,查看資料是否正確同步到MaxCompute中。image.png