‹ Daftar slidePertemuan 4: Integrasi script Python dasar ke dalam aplikasi berbasis React Native
Program Studi Bisnis Digital • FEB UNDIP
Lab Pemrograman
Pertemuan 4 — Integrasi Script Python Dasar ke Aplikasi React Native
Bagaimana perhitungan harga, diskon, dan ongkos kirim yang ditulis dalam Python bisa "berbicara" dengan aplikasi mobile yang Anda bangun memakai React Native.
RPS MINGGU 4 • 2X50 MENIT
Tujuan Pembelajaran Hari Ini
Setelah pertemuan ini, Anda mampu:
TUJUAN 1–2
Menjelaskan mengapa Python tidak bisa berjalan langsung di dalam aplikasi React Native, dan pola arsitektur yang menjembataninya.
Membangun script Python sederhana dan membungkusnya menjadi API (glos: Application Programming Interface, "pintu" komunikasi antar-program) yang bisa diakses lewat internet.
TUJUAN 3–4
Memanggil API Python tersebut dari komponen React Native memakai fetch(), lalu menampilkan hasilnya di layar aplikasi.
Menyusun alur data ujung-ke-ujung: input pengguna → proses Python → tampilan React Native, lengkap dengan penanganan galat sederhana.
Konteks: seluruh contoh hari ini memakai kasus khas bisnis digital Indonesia — kasir UMKM, checkout toko online, dan kalkulator ongkos kirim.
Mengapa Integrasi Ini Penting?
Bayangkan Anda membangun aplikasi kasir untuk UMKM. Aplikasinya dibuat dengan React Native, tetapi Anda ingin memakai kekuatan Python untuk hal berikut.
HITUNGAN BISNIS
Total harga, diskon berjenjang, dan pajak (PPN) yang aturannya sering berubah — lebih mudah dikelola terpusat di Python.
OLAH DATA
Rekomendasi produk, ramalan stok, atau analisis penjualan — Python punya pustaka data science yang matang.
LOGIKA BERSAMA
Satu aturan bisnis dipakai ulang oleh aplikasi mobile, website admin, dan laporan — ditulis sekali di Python.
Pola ini disebut arsitektur client-server: React Native berperan sebagai client (sisi yang dilihat pengguna), Python berperan sebagai server (sisi yang memproses data di belakang layar).
Bagian 1 dari 3
Konsep & Arsitektur Integrasi
Sebelum menulis kode, kita perlu paham dulu mengapa Python dan React Native tidak bisa "digabung langsung", dan jalur apa yang menghubungkan keduanya.
Kenapa Python Tidak Bisa "Ditempel" ke React Native?
React Native berjalan di atas mesin JavaScript (glos: program yang menerjemahkan kode JS jadi aksi di layar HP) — mesin ini tidak mengerti sintaks Python sama sekali.
REACT NATIVE
Ditulis dengan JavaScript.
Berjalan langsung di HP pengguna (Android/iOS).
Tugasnya: tampilan & interaksi pengguna.
PYTHON
Ditulis dengan Python, bahasa berbeda.
Tidak bisa dijalankan oleh HP pengguna secara langsung.
Harus dijalankan di server terpisah.
Analoginya seperti dua orang berbeda bahasa: keduanya tidak bisa "digabung jadi satu orang", tetapi bisa berkomunikasi lewat penerjemah — dalam pemrograman, penerjemah itu adalah API lewat internet.
Jalur komunikasi ini disebut HTTP request/response — format pesannya biasanya JSON (glos: JavaScript Object Notation, format teks terstruktur yang bisa dibaca kedua bahasa pemrograman).
Tiga Pola Umum Integrasi Python
Ada beberapa cara menjembatani Python dan aplikasi mobile; hari ini kita fokus pada opsi pertama karena paling sederhana untuk pemula.
1. REST API (FLASK)
Python berjalan sebagai server kecil, dipanggil lewat fetch(). Fokus hari ini.
2. CLOUD FUNCTION
Script Python dijalankan otomatis di layanan cloud (mis. Google Cloud Functions) saat dipanggil — tanpa mengelola server sendiri.
3. SCRIPT BATCH
Python berjalan terjadwal di server (mis. hitung laporan tiap malam), hasilnya disimpan ke database untuk dibaca aplikasi.
Ketiganya punya prinsip yang sama: Python tidak pernah berjalan di HP pengguna — ia selalu berjalan di server, dan aplikasi hanya membaca hasilnya.
Membungkus Python Jadi API dengan Flask
Flask (glos: kerangka kerja Python ringan untuk membuat server web) mengubah fungsi Python biasa menjadi alamat yang bisa dipanggil lewat internet.
app.py — SERVER FLASK PALING SEDERHANA
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/sapa") def sapa(): return jsonify({"pesan": "Halo dari Python!"})
app.run(host="0.0.0.0", port=5000)
Baris @app.route("/sapa") disebut endpoint (glos: alamat spesifik di server yang bisa diakses, di sini alamatnya adalah /sapa) — setiap fungsi Python bisa dibuka jadi satu endpoint.
Menulis Logika Bisnis: Fungsi Python Murni
Sebelum dibungkus jadi endpoint, tulis dulu logikanya sebagai fungsi Python biasa — lebih mudah diuji terpisah.
FUNGSI hitung_diskon()
def hitung_diskon(harga, persen_diskon): potongan = harga * (persen_diskon / 100) harga_akhir = harga - potongan return round(harga_akhir)
hitung_diskon(150000, 10) # 135000
Praktik baik: pisahkan dulu logika hitungan (fungsi Python) dari logika komunikasi (endpoint Flask) — endpoint tinggal memanggil fungsi ini.
Coba Sendiri: Lacak Pemanggilan Fungsi Python
Ubah nilai parameter yang dikirim ke fungsi, lalu amati bagaimana variabel lokal terbentuk dan nilai baliknya dihitung langkah demi langkah.
Bagian 2 dari 3
Menghubungkan React Native ke API Python
Server Python sudah siap menjawab. Sekarang giliran sisi React Native belajar "bertanya" dan menampilkan jawabannya di layar.
fetch(): Cara React Native "Bertanya" ke Server
fetch() adalah fungsi bawaan JavaScript untuk mengirim permintaan ke alamat internet dan menunggu jawabannya.
fetch(alamat_url)
SIFAT ASINKRON
Glos: asinkron — permintaan butuh waktu (mis. menunggu internet), jadi kode tidak "berhenti diam" menunggu, ia lanjut sambil menunggu jawaban datang.
async / await
Kata kunci JavaScript yang membuat kode asinkron terbaca seperti kode biasa dari atas ke bawah — await berarti "tunggu dulu sampai selesai".
Karena butuh internet, alamat server Python (mis. http://192.168.1.5:5000) harus bisa dijangkau HP — saat pengembangan, biasanya memakai alamat IP komputer di jaringan Wi-Fi yang sama.
Kode Lengkap: Memanggil API dari Komponen React Native
KomponenDiskon.js
import { useState } from "react"; import { View, Button, Text } from "react-native";
function KomponenDiskon() { const [hasil, setHasil] = useState(null);
Alur Data Ujung-ke-Ujung: Dari Sentuhan Jari ke Layar
Mari telusuri langkah demi langkah apa yang sebenarnya terjadi saat pengguna menekan tombol "Hitung Diskon" pada slide sebelumnya.
Tahap
Apa yang Terjadi
Di Sisi Mana
1. Sentuh tombol
Fungsi ambilDiskon() dipanggil
React Native (HP)
2. Kirim request
fetch() mengirim harga 150000 lewat internet
React Native → Server
3. Proses hitungan
Flask menjalankan hitung_diskon(150000, 10)
Server Python
4. Kirim response
Server balas JSON {"harga_akhir": 135000}
Server → React Native
5. Simpan & tampilkan
setHasil(135000) memicu tampilan berubah
React Native (HP)
Seluruh alur ini biasanya berlangsung dalam hitungan ratusan milidetik — tetapi tetap butuh async/await supaya aplikasi tidak "macet" saat menunggu.
Hitung dari Nol: Total Bayar Checkout via API Python
Script Python di server menghitung total bayar keranjang belanja: harga barang Rp150.000, biaya admin API Rp5.000, ditambah PPN 11% (PMK 131/2024).
LANGKAH PERHITUNGAN
Langkah
Perhitungan
Nilai
Harga barang
input dari React Native
Rp150.000
+ Biaya admin API
150.000 + 5.000
Rp155.000
Subtotal (sebelum pajak)
dari langkah sebelumnya
Rp155.000
Hitung PPN 11%
155.000 x 11%
Rp17.050
Total bayar
155.000 + 17.050
Rp172.050
RESPONSE JSON DIKIRIM KE RN
Rp172.050
{"total_bayar": 172050}
React Native tidak perlu tahu cara menghitung PPN sama sekali — ia hanya menampilkan angka jadi yang dikirim Python. Kalau tarif PPN berubah suatu saat, cukup ubah satu fungsi di server.
Coba Sendiri: Hitung Total Bayar dengan PPN 11%
Ubah harga barang dan biaya admin, lalu amati bagaimana PPN efektif 11% dihitung dan total bayar akhirnya.
Bagian 3 dari 3
Studi Kasus & Penanganan Galat
Kita satukan seluruh konsep dalam satu studi kasus baru, lalu belajar apa yang harus dilakukan ketika koneksi ke server Python gagal.
Studi Kasus: Kalkulator Ongkos Kirim
Form React Native meminta pengguna mengisi jarak dan berat paket, lalu server Python menghitung ongkos kirimnya.
Endpoint /ongkir?jarak=8&berat=2.5 di Flask memanggil fungsi ini, lalu React Native menampilkan hasilnya di layar checkout — pola yang persis sama dengan studi kasus diskon tadi.
Hitung dari Nol: Ongkos Kirim Paket 8 km, 2,5 kg
Pengguna mengisi form: jarak 8 km, berat 2,5 kg. Tarif jarak Rp5.000/km, tarif berat Rp2.000/kg (dibulatkan ke atas).
LANGKAH PERHITUNGAN
Langkah
Perhitungan
Nilai
Tarif jarak
8 km x Rp5.000/km
Rp40.000
Berat dibulatkan ke atas
2,5 kg → 3 kg
3 kg
Biaya berat
3 kg x Rp2.000/kg
Rp6.000
Total ongkir
40.000 + 6.000
Rp46.000
DITAMPILKAN DI APLIKASI
Rp46.000
hasil hitung_ongkir(8, 2.5)
Sama seperti kasus diskon: React Native cukup memanggil endpoint /ongkir, menampilkan angka Rp46.000 tanpa perlu tahu rumus di baliknya.
Menangani Galat: Kalau Server Tidak Merespons
Koneksi internet bisa putus, atau server Python bisa sedang mati — aplikasi yang baik harus siap menghadapinya, bukan langsung macet.
SISI PYTHON: try/except
try: hasil = hitung_diskon(harga, 10) except Exception as e: return jsonify({"error": str(e)}), 400
SISI REACT NATIVE: try/catch
try { const r = await fetch(url); const data = await r.json(); setHasil(data.total); } catch (e) { setError("Gagal terhubung ke server"); }
Glos: try/except (Python) dan try/catch (JavaScript) — blok kode yang "mencoba" menjalankan sesuatu, dan menangkap kesalahannya kalau gagal, alih-alih membuat program berhenti total.
Latihan Kelas: Coba Sendiri
Kerjakan berpasangan dengan teman sebangku selama 15 menit, lalu kita bahas bersama.
SOAL 1 — SISI PYTHON
Tulis fungsi Python hitung_poin_loyalitas(total_belanja) yang mengembalikan 1 poin untuk setiap kelipatan Rp10.000 belanja. Bungkus jadi endpoint Flask /poin.
SOAL 2 — SISI REACT NATIVE
Tulis komponen React Native dengan tombol "Cek Poin" yang memanggil endpoint /poin memakai fetch(), lalu tampilkan hasilnya dengan <Text>. Tambahkan try/catch.
Petunjuk: gambar dulu diagram arsitekturnya di kertas (seperti Slide 6) sebelum mengetik kode — kebiasaan ini membantu Anda tidak bingung "kode ini jalan di sisi mana".
Rangkuman & Persiapan Minggu Depan
CHEAT SHEET PERTEMUAN 4
Konsep
Sintaks/Pola
Server Python
Flask, @app.route(), jsonify()
Panggil dari RN
await fetch(url), r.json()
Simpan hasil
useState + setHasil()
Tangani galat
try/except (Python), try/catch (JS)
MINGGU DEPAN — PERTEMUAN 5
State & Props
Data interaktif dalam React Native
Kita akan memperdalam useState yang baru dikenalkan hari ini, ditambah props untuk berbagi data antar-komponen dalam aplikasi interaktif.