Switchboard membuat bekerja dengan API menjadi mudah. Switchboard membantu Anda mengonversi skema JSON dengan mudah. Dengan membuat switchboard dan menentukan beberapa kabel, Anda dapat mengatur bidang mana dari skema lama yang berimplikasi pada bidang mana dalam skema baru.
Nama Switchboard adalah asosiasi operator telepon zaman dulu. Dengan menggunakan Switchboard, Anda bertindak sebagai operator. Menghubungkan bidang skema satu sama lain menyerupai switchboard operator telepon. Foto oleh Sejarah Gawler.
Saat bekerja dengan integrasi dan API pihak ketiga, misalnya, Anda sering menghadapi situasi di mana data harus digali secara manual. Mari kita asumsikan bahwa Anda memiliki skema database sederhana seperti berikut:
Column | Type ---------------+------- first_name | string last_name | string email | string
Anda bekerja dengan API pengguna pihak ketiga, misalnya, yang mengembalikan jenis payload berikut:
{ "id": 12335, "firstName": "John", "lastName": "Doe", "contactInfo": {"primaryEmail": "[email protected]" } }
Jadi, apa yang harus dilakukan sekarang? Apa cara terbaik untuk mengubah payload ke format Anda sendiri? Apakah ini terlihat familier:
respon_dict = json.loads(response.body)data = {"first_name": respon_dict.get("firstName"),"last_name": respon_dict.get("lastName"),"email": respon_dict.get("contactInfo" , {}).mendapatkan("Email utama") }
Sayangnya, solusi di atas menjadi sangat berantakan ketika bekerja dengan struktur JSON bersarang, beberapa API pihak ketiga, atau kombinasi keduanya. Inilah sebabnya mengapa Switchboard berguna, dengan menentukan switchboard baru, Anda dapat dengan mudah mengelola pemetaan data antar skema yang berbeda.
dari switchboard import Switchboard, Cordclass UserSwitchboard(Switchboard):first_name = Cord("firstName")last_name = Cord("lastName")email = Cord(["contactInfo", "primaryEmail"]) # Perhatikan betapa sederhananya mengakses nested data!
Sekarang, kodenya terlihat jauh lebih baik. Bagus!
respon_dict = json.loads(response.body)data = UserSwitchboard().apply(response_dict)
Proyek ini masih dalam proses. Dokumentasi yang lebih baik akan menyusul nanti.
Mendefinisikan Switchboard baru itu mudah. Yang perlu Anda lakukan hanyalah mengimpornya, dan menentukan beberapa akord.
dari switchboard import Switchboard, Cordclass MySwitchboard(Switchboard):nama_pet = Kabel(source="nama hewan peliharaan", # Sumber memberitahukan lokasi field dalam skema sumber yang diperlukan=Benar, # Jika field wajib diisi dan tidak ada, pengecualian dimunculkandefault="Mr. Dog" # Jika bidang tidak ada, nilai default digunakan)
Fungsionalitas switchboard dapat diubah menggunakan kelas Meta:
from switchboard import Switchboard, Cordclass MySwitchboard(Switchboard):class Meta:# Memberi tahu apa yang harus dilakukan dengan kolom yang hilang. Fungsi default adalah INCLUDE,# yang berarti jika field sumber tidak ada, field akan ditambahkan tetapi nilai field# akan menjadi Nonemissing = Switchboard.EXCLUDE # Opsi: Switchboard.EXCLUDE | Switchboard.TERMASUK | Switchboard.RAISEpet_name = Kabel("nama hewan peliharaan")
Kabel dapat mengakses bidang bersarang, bahkan daftar.
dari impor switchboard Switchboard, Cordclass MySwitchboard(Switchboard):target_field = Kabel(source=["field1", # Cocok dengan field key0, # Cocok dengan indeks daftar"field2" # Cocok dengan field key] )MySwitchboard().apply({ "field1": [{ "field2": "value" }] })# > { "target_field": "value" }
Switchboard many
atribut membantu menangani daftar. Misalnya:
kelas MySwitchboard(Switchboard):target = Kabel("sumber")data_in = [ {"sumber": 1}, {"sumber": 2}, {"sumber": 3}, {"sumber": 4} ]MySwitchboard(many=True).apply(data_in)# > [{ "target": 1 }, { "target": 2 }, { "target": 3 }, {"target": 4 }]