全部产品
Search
文档中心

DataWorks:Sumber data RestAPI (HTTP)

更新时间:Oct 29, 2025

Anda dapat membuat sumber data RestAPI untuk menulis data JSON melalui RESTful API ke sumber data lain, seperti MaxCompute, menggunakan tugas sinkronisasi data. Sumber data RestAPI juga dapat digunakan sebagai tujuan untuk menerima data dari sumber data lain. Topik ini menjelaskan kemampuan sinkronisasi data dari sumber data RestAPI di DataWorks.

Batasan

Tipe bidang yang didukung

Penting

Ketika data disinkronkan ke tujuan, hanya skema tabel satu lapis yang didukung. Struktur bidang bersarang tidak didukung. Sebagai contoh, jika API mengembalikan struktur `{data: {user: { id: 1, name:'lily'}, value: 123}}`, bidang tersebut harus diproses sebagai bidang paralel seperti `user_id`, `user_name`, dan `value` di tujuan.

Klasifikasi Tipe

Tipe kolom Konfigurasi Integrasi Data

Integer

LONG, INT

String

STRING

Floating-point

DOUBLE, FLOAT

Boolean

BOOLEAN

Tanggal dan waktu

DATE

Tambahkan sumber data

Sebelum mengembangkan tugas sinkronisasi di DataWorks, Anda harus menambahkan sumber data yang diperlukan ke DataWorks dengan mengikuti petunjuk di Manajemen Sumber Data. Anda dapat melihat tips informasi parameter di Konsol DataWorks untuk memahami arti parameter saat menambahkan sumber data.

Mengembangkan tugas sinkronisasi data

Untuk informasi tentang titik masuk dan prosedur konfigurasi tugas sinkronisasi, lihat panduan konfigurasi berikut.

Panduan konfigurasi untuk tugas sinkronisasi offline tabel tunggal

Contoh

FAQ

  • Apakah saya hanya bisa menentukan jumlah halaman untuk permintaan data?

    • Jawaban: Ya, Anda bisa.

  • Apakah pemutaran otomatis halaman didukung? Misalnya, apakah pemutaran halaman berhenti ketika tidak ada lagi data yang dikembalikan untuk parameter permintaan?

    • Jawaban: Tidak, tidak didukung. Jika tidak, data tidak dapat dibagi.

  • Jika saya harus menentukan jumlah halaman, tetapi jumlah yang ditentukan lebih besar dari jumlah halaman sebenarnya, apa yang terjadi ketika halaman berikutnya kosong?

    • Jawaban: Jika halaman berikutnya kosong, itu dianggap sebagai hasil kosong dari kueri SQL. Sistem melanjutkan ke kueri berikutnya.

  • Apakah hanya penguraian JSON satu lapis yang didukung?

    • Jawaban: Benar. Penguraian mendalam tidak dilakukan.

  • Bagaimana cara mengonfigurasi tipe non-array untuk RestAPI di DataWorks Data Integration?

    • Jawaban: Di bagian reader, dalam bagian parameter, atur parameter dataPath ke jalur data non-array. Contohnya, dataPath:"data.list". Ini memungkinkan plugin menemukan bidang data yang ingin Anda baca. Kemudian, atur parameter dataMode ke multiData. Pengaturan ini menginstruksikan DataWorks untuk memproses data sebagai beberapa catatan terpisah, meskipun data tidak dalam format array di data sumber.

      Catatan

      Catatan bahwa dalam mode multiData, konfigurasi kolom tidak berlaku. Anda harus menentukan jalur data untuk dibaca langsung di parameter dataPath.

      Kode berikut menunjukkan contoh konfigurasi untuk tipe non-array untuk RestAPI di DataWorks Data Integration:

      reader: {
        name: "restapi",
        parameter: {
          dataPath: "data.list",
          dataMode: "multiData",
          // Parameter lainnya
        }
      }

Lampiran: Demo skrip dan deskripsi parameter

Konfigurasikan tugas sinkronisasi batch menggunakan editor kode

Jika Anda ingin mengonfigurasi tugas sinkronisasi batch menggunakan editor kode, Anda harus mengonfigurasi parameter terkait dalam skrip berdasarkan persyaratan format skrip terpadu. Untuk informasi lebih lanjut, lihat Konfigurasikan Tugas di Editor Kode. Informasi berikut menjelaskan parameter yang harus Anda konfigurasikan untuk sumber data saat mengonfigurasi tugas sinkronisasi batch menggunakan editor kode.

Demo skrip pembaca

  • Kode berikut memberikan contoh skrip:

    {
        "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"  // Temukan data dari jalur a.b.
                        },
                        {
                            "type":"string",  // Temukan data dari jalur 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,  // Jika throttle diatur ke false, parameter mbps tidak berpengaruh dan laju data tidak dibatasi. Jika throttle diatur ke true, laju data dibatasi.
                "concurrent":1,  // Konkurensi pekerjaan. 
                "mbps":"12"// Laju data maksimum. 1 mbps sama dengan 1 MB/s.
            }
        },
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                }
            ]
        }
    }
  • Kode berikut menunjukkan konfigurasi di editor kode:

    Setelah plugin Restapi mengirimkan permintaan HTTP atau HTTPS, ia menerima badan respons dalam format JSON. Parameter dataPath menentukan JSONPath yang digunakan untuk mengekstrak data dari badan. Dua contoh berikut menunjukkan cara mengonfigurasi parameter:
    
    
    Contoh 1: API mengembalikan badan berikut. Data bisnis berada di bidang DATA, dan API mengembalikan beberapa baris data sekaligus. DATA adalah array.
    {
        "HEADER": {
            "BUSID": "bid1",
            "RECID": "uuid",
            "SENDER": "dc",
            "RECEIVER": "pre",
            "DTSEND": "202201250000"
        },
        "DATA": [
            {
                "SERNR": "sernr1"
            },
            {
                "SERNR": "sernr2"
            }
        ]
    }
    
    Jika Anda ingin mengekstrak beberapa baris data dari DATA sebagai beberapa catatan sinkronisasi, atur kolom menjadi "column": [ "SERNR" ], dataMode menjadi "dataMode": "multiData", dan dataPath menjadi "dataPath": "DATA".
    
    
    Contoh 2: API mengembalikan badan berikut. Data bisnis berada di bidang content.DATA, dan API mengembalikan satu baris data pada satu waktu. DATA adalah objek.
    {
        "HEADER": {
            "BUSID": "bid1",
            "RECID": "uuid",
            "SENDER": "dc",
            "RECEIVER": "pre",
            "DTSEND": "202201250000"
        },
        "content": {
            "DATA": {
                "SERNR": "sernr2"
            }
        }
    }
    
    Jika Anda ingin mengekstrak satu baris data dari content.DATA sebagai satu catatan sinkronisasi, atur kolom menjadi "column": [ "SERNR" ], dataMode menjadi "dataMode": "oneData", dan dataPath menjadi "dataPath": "content.DATA".
                    

Parameter skrip pembaca

Catatan

Parameter berikut digunakan saat Anda menambahkan sumber data dan mengonfigurasi node Integrasi Data.

Plugin tidak mendukung parameter penjadwalan.

Parameter

Deskripsi

Diperlukan

Nilai default

url

Alamat API RESTful.

Ya

Tidak ada

dataMode

Format data JSON yang dikembalikan untuk permintaan RESTful.

  • oneData: mengambil satu data dari data JSON yang dikembalikan.

  • multiData: mengambil array JSON dari data JSON yang dikembalikan dan meneruskan beberapa data ke writer.

Ya

Tidak ada

responseType

Format data yang dikembalikan. Hanya JSON yang didukung.

Ya

JSON

column

Daftar bidang yang akan dibaca. Parameter type menentukan tipe data sumber, dan parameter name menentukan jalur JSON tempat mengambil data untuk kolom saat ini. Anda dapat menentukan bidang kolom. Contoh:

"column":[{"type":"long","name":"a.b" // Temukan data dari jalur a.b.}, {"type":"string","name":"a.c" // Temukan data dari jalur a.c.}]

Anda harus menentukan parameter type dan name untuk setiap kolom.

Ya

Tidak ada

dataPath

Jalur yang digunakan untuk menanyakan objek JSON tunggal atau array JSON dari hasil yang dikembalikan.

Tidak

Tidak ada

method

Metode permintaan. Nilai valid: get dan post.

Ya

Tidak ada

socketTimeout

Periode timeout socket untuk mengakses data dari API RESTful. Unit: milidetik.

Tidak

60000

customHeader

Informasi header yang diteruskan ke API RESTful.

Tidak

Tidak ada

parameters

Informasi parameter yang diteruskan ke API RESTful.

  • Untuk permintaan GET, masukkan parameter dalam format abc=1&def=1.

  • Untuk permintaan POST, masukkan parameter dalam format JSON.

Tidak

Tidak ada

dirtyData

Metode untuk menangani situasi di mana data tidak dapat ditemukan di jalur JSON yang ditentukan dari kolom.

  • dirty: Jika kolom tidak dapat ditemukan saat rekaman diurai, rekaman ditandai sebagai data kotor.

  • null: Jika kolom tidak dapat ditemukan saat rekaman diurai, nilai kolom diatur ke null.

Ya

dirty

requestTimes

Jumlah kali meminta data dari alamat RESTful.

  • single: hanya mengirim satu permintaan.

  • multiple: mengirim beberapa permintaan.

Ya

single

requestParam

Jika Anda mengatur requestTimes ke multiple, Anda harus menentukan parameter untuk loop, seperti pageNumber. Plugin meneruskan parameter pageNumber ke API RESTful dalam loop berdasarkan startIndex, endIndex, dan step yang ditentukan untuk mengirim beberapa permintaan.

Tidak

Tidak ada

startIndex

Indeks awal untuk permintaan loop. Indeks awal termasuk dalam loop.

Tidak

Tidak ada

endIndex

Indeks akhir untuk permintaan loop. Indeks akhir termasuk dalam loop.

Tidak

Tidak ada

step

Ukuran langkah untuk permintaan loop.

Tidak

Tidak ada

authType

Metode autentikasi. Nilai valid:

  • Basic Authentication: autentikasi dasar

    Jika sumber data mendukung autentikasi berbasis nama pengguna dan kata sandi, Anda dapat memilih Basic Authentication dan mengonfigurasi nama pengguna dan kata sandi yang dapat digunakan untuk autentikasi. Selama integrasi data, nama pengguna dan kata sandi ditransfer ke URL API RESTful untuk autentikasi. Sumber data hanya terhubung setelah autentikasi berhasil.

  • Token Authentication: autentikasi berbasis token

    Jika sumber data mendukung autentikasi berbasis token, Anda dapat memilih Token Authentication dan mengonfigurasi nilai token tetap yang dapat digunakan untuk autentikasi. Selama integrasi data, token terkandung dalam header permintaan, seperti {"Authorization":"Bearer TokenXXXXXX"}, dan ditransfer ke URL API RESTful untuk autentikasi. Sumber data hanya terhubung setelah autentikasi berhasil.

    Catatan

    Jika Anda ingin menggunakan metode autentikasi kustom, Anda dapat memilih Token Authentication dan mengonfigurasi nilai token tetap di bidang Token. Nilai token dapat digunakan untuk autentikasi setelah dienkripsi.

Tidak

Tidak ada

authUsername/authPassword

Nama pengguna dan kata sandi untuk Basic Auth.

Tidak

Tidak ada

authToken

Token untuk Token Auth.

Tidak

Tidak ada

accessKey/accessSecret

Informasi akun untuk autentikasi tanda tangan API Aliyun.

Tidak

Tidak ada

Demo skrip penulis

{
    "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", // Tempatkan data kolom di jalur a.b.
                        "name":"a.b"
                    },
                    {
                        "type":"string", // Tempatkan data kolom di jalur 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" // Jumlah rekaman kesalahan.
        },
        "speed":{
            "throttle":true,// Jika throttle diatur ke false, parameter mbps tidak berpengaruh dan laju data tidak dibatasi. Jika throttle diatur ke true, laju data dibatasi.
            "concurrent":1, // Konkurensi pekerjaan.
            "mbps":"12"// Laju data maksimum. 1 mbps sama dengan 1 MB/s.
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Parameter skrip penulis

Parameter

Deskripsi

Diperlukan

Nilai default

url

Alamat API RESTful.

Ya

Tidak ada

dataMode

Format data JSON yang diteruskan dalam permintaan RESTful.

  • oneData: meneruskan satu rekaman per permintaan. Jumlah permintaan sama dengan jumlah rekaman.

  • multiData: meneruskan sekelompok rekaman per permintaan. Jumlah permintaan ditentukan oleh jumlah tugas yang dibagi di sisi pembaca.

Ya

Tidak ada

column

Daftar jalur bidang yang sesuai dengan data JSON yang dihasilkan. Parameter type menentukan tipe data sumber, dan parameter name menentukan jalur JSON tempat data untuk kolom saat ini ditempatkan. Anda dapat menentukan bidang kolom. Contoh:

"column":[{"type":"long","name":"a.b" // Tempatkan data kolom di jalur a.b.}, {"type":"string","name":"a.c" // Tempatkan data kolom di jalur a.c.}]

Catatan

Anda harus menentukan parameter type dan name untuk setiap kolom.

Ya

Tidak ada

dataPath

Jalur objek JSON tempat hasil data ditempatkan.

Tidak

Tidak ada

method

Metode permintaan. Nilai valid: post dan put.

Ya

Tidak ada

customHeader

Informasi header yang diteruskan ke API RESTful.

Tidak

Tidak ada

authType

Metode autentikasi.

  • Basic Authentication: autentikasi dasar

    Jika sumber data mendukung autentikasi berbasis nama pengguna dan kata sandi, Anda dapat memilih Basic Authentication dan mengonfigurasi nama pengguna dan kata sandi yang dapat digunakan untuk autentikasi. Selama integrasi data, nama pengguna dan kata sandi ditransfer ke URL API RESTful untuk autentikasi. Sumber data hanya terhubung setelah autentikasi berhasil.

  • Token Authentication: autentikasi berbasis token

    Jika sumber data mendukung autentikasi berbasis token, Anda dapat memilih Token Authentication dan mengonfigurasi nilai token tetap yang dapat digunakan untuk autentikasi. Selama integrasi data, token terkandung dalam header permintaan, seperti {"Authorization":"Bearer TokenXXXXXX"}, dan ditransfer ke URL API RESTful untuk autentikasi. Sumber data hanya terhubung setelah autentikasi berhasil.

    Catatan

    Jika Anda ingin menggunakan metode autentikasi kustom, Anda dapat memilih Token Authentication dan mengonfigurasi nilai token tetap di bidang Token. Nilai token dapat digunakan untuk autentikasi setelah dienkripsi.

Tidak

Tidak ada

authUsername/authPassword

Nama pengguna dan kata sandi untuk Basic Auth.

Tidak

Tidak ada

authToken

Token untuk Token Auth.

Tidak

Tidak ada

accessKey/accessSecret

Informasi akun untuk autentikasi tanda tangan API Aliyun.

Tidak

Tidak ada

batchSize

Jumlah maksimum rekaman dalam satu permintaan ketika dataMode diatur ke multiData.

Ya

512