3.2 KiB
Ini adalah inti dari logika script tersebut. Teknik ini disebut "Dynamic Payload Injection based on Local Topology".
Secara sederhana: Script tidak menembak data sembarangan, tetapi membaca "Peta Wilayah" (Tabel RT) yang ada di database lokal Anda terlebih dahulu, lalu menggunakan data tersebut sebagai filter saat meminta data ke API.
Berikut adalah penjelasan teknis untuk developer mengenai bagaimana ID Kecamatan, Kelurahan, RW, dan RT "disuntikkan" ke dalam request:
1. Sumber Data (The Source)
Script tidak menulis manual ID-ID tersebut di dalam kodingan (hardcoded), melainkan mengambilnya dari database lokal (models.py class RT).
- Kode:
rt_list = RT.query.all() - Artinya: "Ambil semua daftar RT yang kita punya di database lokal."
- Implikasi: Jika di database lokal tabel
RTada 100 baris data, script akan melakukan 100 kali request berbeda.
2. Iterasi & Ekstraksi (The Loop)
Script melakukan looping (perulangan) pada daftar RT tersebut. Di setiap putaran, script "mencabut" ID wilayah dari objek database.
- Kode:
for idx, rt_obj in enumerate(rt_list): - Ekstraksi:
rt_obj.id_kec(misal: 3501)rt_obj.id_kel(misal: 2001)rt_obj.no_rw(misal: 05)rt_obj.no_rt(misal: 12)
3. Konstruksi Payload (The Injection)
Inilah jawaban utamanya. ID-ID wilayah tersebut dimasukkan ke dalam Dictionary Python (yang akan jadi JSON). API target mewajibkan pengirim (client) mengirimkan parameter ini agar server tahu data mana yang diminta.
[Image of JSON payload structure diagram for API request]
Lihat bagian kode ini di script Anda:
payload = {
"id": int(prog_id), # ID Program (Bansos, dll)
"id_kec": str(rt_obj.id_kec), # <--- ID Kecamatan disuntikkan di sini
"id_kel": str(rt_obj.id_kel), # <--- ID Kelurahan disuntikkan di sini
"rw": str(rt_obj.no_rw), # <--- RW disuntikkan di sini
"rt": str(rt_obj.no_rt), # <--- RT disuntikkan di sini
"start": "0",
"limit": "500"
}
4. Pengiriman Request (The Execution)
Saat requests.post(url, json=payload) dijalankan, script mengirim amplop tertutup berisi JSON di atas.
Logika di sisi Server API (Target):
"Oh, user ini meminta data Program Bansos (id:1), tapi HANYA untuk Kec 3501, Kel 2001, RW 05, RT 12. Oke, saya filter database saya dan kirim balik data warga di titik itu saja."
Teks Penjelasan untuk Developer (Copy-Paste)
Anda bisa memberikan penjelasan berikut ini agar developer langsung paham:
"Teknik pengambilan datanya menggunakan Zone-Based Filtering melalui HTTP POST Body.
- Script melakukan query
SELECT * FROM rtdi database lokal untuk mendapatkan daftar target wilayah yang valid.- Di dalam loop, script secara dinamis menyusun JSON Payload dengan menyuntikkan value
id_kec,id_kel,rw, danrtyang diambil dari row database tersebut.- API Endpoint
/qv2k9kemudian merespons dengan mengembalikan list warga spesifik hanya untuk koordinat wilayah RT/RW tersebut (bukan dump global).Jadi, parameter wilayah didikte oleh data master RT yang ada di database lokal (table
rt), bukan input manual user."