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
Saat ini, sumber data ini hanya mendukung kelompok sumber daya tanpa server dan kelompok sumber daya eksklusif untuk Data Integration.
Anda tidak dapat mengatur parameter timeout. Periode timeout permintaan bawaan di DataWorks adalah 60 detik. Jika kueri API membutuhkan waktu lebih dari 60 detik untuk merespons, tugas akan gagal.
Tipe bidang yang didukung
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
Untuk instruksi, lihat Konfigurasi UI Tanpa Kode atau Konfigurasi Editor Kode.
Untuk daftar semua parameter untuk konfigurasi editor kode dan contoh kode, lihat Lampiran: Kode dan Parameter.
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 bagianparameter, atur parameterdataPathke jalur data non-array. Contohnya,dataPath:"data.list". Ini memungkinkan plugin menemukan bidang data yang ingin Anda baca. Kemudian, atur parameterdataModekemultiData. Pengaturan ini menginstruksikan DataWorks untuk memproses data sebagai beberapa catatan terpisah, meskipun data tidak dalam format array di data sumber.CatatanCatatan bahwa dalam mode
multiData, konfigurasikolomtidak berlaku. Anda harus menentukan jalur data untuk dibaca langsung di parameterdataPath.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
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.
| 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.
| Tidak | Tidak ada |
dirtyData | Metode untuk menangani situasi di mana data tidak dapat ditemukan di jalur JSON yang ditentukan dari kolom.
| Ya | dirty |
requestTimes | Jumlah kali meminta data dari alamat RESTful.
| 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:
| 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.
| 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.
| 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 |