‹ Daftar slidePertemuan 12: Integrasi komponen front-end dan back-end dalam satu sistem aplikasi
Program Studi Bisnis Digital • FEB UNDIP
Lab Pemrograman
Pertemuan 12 — Integrasi Komponen Front-end dan Back-end dalam Satu Sistem Aplikasi
Menyatukan potongan-potongan yang selama ini dibangun terpisah — tampilan React Native, REST API, dan database — menjadi satu aplikasi bisnis digital yang benar-benar hidup dan saling berbicara.
RPS MINGGU 13 • 2 × 50 MENIT
Tujuan Pembelajaran Hari Ini
Sesuai RPS minggu 13, setelah pertemuan ini Anda diharapkan mampu mengintegrasikan komponen front-end dan back-end menjadi satu sistem aplikasi yang utuh. Secara rinci:
Konsep
Alur Data End-to-End
Memahami perjalanan data dari ketukan layar pengguna, lewat REST API, sampai tersimpan/terbaca di database, lalu kembali lagi ke layar.
Konsep
State, Loading & Error
Mampu mengelola kondisi aplikasi saat menunggu jawaban server dan saat terjadi kegagalan, tanpa membuat pengguna bingung.
Di Mana Posisi Kita Sekarang?
Selama sebelas pertemuan, kita membangun potongan-potongan sistem secara terpisah. Hari ini semua potongan itu disatukan menjadi satu aplikasi yang berjalan penuh.
Pertemuan
Apa yang Sudah Dibangun
P3–P7
Tampilan & navigasi React Native (front-end)
P8–P9
REST API & struktur database (back-end)
P10–P11
Dummy API & operasi CRUD dari GUI Python
P12 (hari ini)
Menyatukan ketiganya jadi satu sistem nyata
Tanpa integrasi, front-end hanya tampilan kosong dan back-end hanya kode yang berjalan sendirian — keduanya baru jadi "aplikasi" saat tersambung.
Bagian 1 dari 3
Arsitektur Sistem Terintegrasi
Memahami bagaimana client, server, dan database saling terhubung dalam satu sistem aplikasi yang utuh.
Anatomi Sistem: Client, Server, Database
Sistem aplikasi terintegrasi terdiri dari tiga lapisan yang saling berkirim data, bukan satu blok kode raksasa.
Client tidak pernah menyentuh database secara langsung — semua permintaan harus lewat server yang menjaga aturan dan keamanan.
REST API: Jembatan Bahasa Client dan Server
Ingat kembali Pertemuan 8: REST API adalah kumpulan endpoint (alamat) yang menerima permintaan HTTP dan mengembalikan data, biasanya dalam format JSON.
Metode HTTP Umum
GET — ambil data (mis. daftar produk)
POST — kirim data baru (mis. transaksi baru)
PUT — ubah data yang sudah ada
DELETE — hapus data
Contoh Endpoint Kasir UMKM
GET /api/produk — daftar produk
POST /api/transaksi — simpan penjualan
PUT /api/produk/5 — ubah stok produk 5
DELETE /api/produk/5 — hapus produk 5
Alur Data End-to-End: Dari Ketukan Layar ke Database
Studi kasus: kasir mengetuk tombol "Bayar" di aplikasi React Native. Berikut perjalanan datanya, langkah demi langkah.
Langkah
Apa yang Terjadi
Di Mana
1
Kasir mengetuk tombol "Bayar"
Client (React Native)
2
Fungsi fetch()/axios mengirim POST berisi JSON transaksi
Client → Server
3
Flask menerima request, validasi data, hitung total
Server
4
Server menyimpan baris baru ke tabel transaksi
Server → Database
5
Server mengirim response JSON "berhasil" ke client
Server → Client
6
Layar menampilkan struk & state loading berhenti
Client (React Native)
Konfigurasi Endpoint: Base URL & Environment
Front-end perlu tahu ke mana harus mengirim request. Alamat ini disimpan sebagai base URL, biasanya di satu file konfigurasi, bukan ditulis berulang di setiap layar.
// config.js — satu sumber kebenaran alamat serverexport const BASE_URL = "http://192.168.1.10:5000";
// dipakai di layar mana punfetch(`${BASE_URL}/api/produk`)
.then(res => res.json())
.then(data => setProduk(data));
Glosarium: base URL = alamat dasar server (mis. IP komputer dosen di jaringan lab). environment = kondisi berjalannya aplikasi (development di laptop vs production di server sungguhan) — base URL biasanya berbeda untuk tiap environment.
Autentikasi Terintegrasi: Token di Header Request
Ingat halaman login di Pertemuan 6. Setelah login berhasil, server memberi token yang harus disertakan di setiap request berikutnya sebagai bukti identitas.
Langkah 1
Login
Client kirim email + password ke /api/login. Server balas token jika cocok.
Langkah 2
Header Authorization
Setiap request berikutnya menyertakan token di header: Authorization: Bearer <token>.
Tanpa token yang valid, server menolak request dengan status 401 Unauthorized — ini melindungi data seperti riwayat transaksi agar tidak diakses sembarang orang.
Hitung dari Nol: Waktu Respons Total Alur Login
Aplikasi kasir UMKM login lewat jaringan Wi-Fi lab. Empat tahap request-response punya waktu masing-masing. Berapa total waktu sampai layar menampilkan hasil?
Langkah
Perhitungan
Nilai
1. Request dikirim client → server
latensi jaringan
120 ms
2. Server validasi & hitung logika
waktu proses server
80 ms
3. Query ke database mengambil data user
waktu query
45 ms
4. Response dikirim server → client
latensi jaringan
120 ms
5. Total waktu respons
120 + 80 + 45 + 120
365 ms
Total Waktu Login
365 ms
Coba Sendiri: Hitung Total Latensi Alur Login
Ubah waktu tiap tahap request-response, lalu amati bagaimana total waktu yang dirasakan pengguna berubah.
Hitung dari Nol: Efisiensi Data dengan Pagination
Database sebuah toko online punya 500 produk, tiap produk dalam format JSON berukuran 2 KB. Bandingkan kirim semua sekaligus vs kirim per halaman (pagination) 20 produk.
Langkah
Perhitungan
Nilai
1. Total produk di database
—
500 record
2. Ukuran rata-rata per record JSON
—
2 KB
3. Tanpa pagination: total data terkirim
500 × 2 KB
1.000 KB
4. Dengan pagination (20/halaman): data per request
20 × 2 KB
40 KB
5. Penghematan data
(1.000 − 40) ÷ 1.000 × 100%
96%
Penghematan per Request
96%
Bagian 2 dari 3
Loading, Error, dan State Terintegrasi
Bagaimana aplikasi menampilkan kondisi "sedang bekerja" dan "terjadi masalah" agar pengguna tidak bingung.
Loading State: Menunggu Jawaban Server dengan Elegan
Selama request berjalan (365 milidetik dari contoh Slide 10, atau bisa lebih lama), aplikasi harus memberi tahu pengguna bahwa sistem sedang bekerja — bukan diam membisu.
Ingat Pertemuan 5: loading adalah state biasa — setiap kali nilainya berubah, React Native otomatis menggambar ulang tampilan yang relevan.
Error Handling Terintegrasi: Saat Sesuatu Gagal
Server bisa menjawab dengan berbagai status code. Front-end harus mengenali dan meresponsnya dengan pesan yang dipahami pengguna, bukan layar kosong atau aplikasi crash.
Status Code Umum
200 OK — berhasil
400 Bad Request — data salah format
401 Unauthorized — token tidak valid
404 Not Found — data tidak ditemukan
500 Server Error — server bermasalah
Pola try/catch di React Native
try — jalankan request
catch — tangkap kegagalan jaringan
Tampilkan pesan: "Koneksi bermasalah, coba lagi"
CRUD Penuh: Form React Native → API → Database
Ingat Pertemuan 11 (CRUD dari GUI Python). Pola yang sama kini kita terapkan di React Native, tersambung ke back-end sungguhan.
Operasi CRUD
Aksi di Layar React Native
Endpoint yang Dipanggil
Create
Isi form produk baru, tekan "Simpan"
POST /api/produk
Read
Buka halaman daftar produk
GET /api/produk
Update
Ubah harga di form edit, tekan "Perbarui"
PUT /api/produk/5
Delete
Tekan ikon hapus pada satu produk
DELETE /api/produk/5
Setelah tiap operasi berhasil, layar harus memuat ulang daftar data (panggil ulang GET) agar tampilan selalu sesuai isi database terbaru.
Bagian 3 dari 3
Studi Kasus & Debugging Sistem Terintegrasi
Merangkai semua komponen dalam satu studi kasus aplikasi kasir UMKM, lalu belajar mencari sumber masalah saat sistem tidak berjalan mulus.
Studi Kasus: Aplikasi Kasir UMKM End-to-End
Warung "Kopi Bu Warsih" ingin aplikasi kasir. Berikut potongan kode React Native yang menyatukan fetch data, tampilkan, dan kirim transaksi.
useEffect(() => {
setLoading(true);
fetch(`${BASE_URL}/api/produk`, {
headers: { Authorization: `Bearer ${token}` }
})
.then(res => res.json())
.then(data => setProdukList(data))
.catch(() => setError("Gagal memuat produk"))
.finally(() => setLoading(false));
}, []); // dipanggil sekali saat layar dibuka
Perhatikan: token (Slide 9) dikirim di header, loading (Slide 13) dikelola, dan catch (Slide 14) menangani kegagalan — tiga konsep hari ini bertemu dalam satu fungsi.
Debugging Sistem Terintegrasi: Di Mana Mencari Masalah?
Saat aplikasi "tidak jalan", masalahnya bisa ada di salah satu dari tiga lapisan. Periksa berurutan, jangan menebak.
1. Cek Client Apakah BASE_URL benar? Apakah fetch/axios memakai method & body yang sesuai?
2. Cek Server Buka log Flask di terminal — apakah request diterima? Apakah ada pesan error saat validasi?
3. Cek Database Apakah tabel & kolom sesuai dengan yang diharapkan query di Pertemuan 9?
Alat bantu: console.log() di client, print() di Flask, dan lihat langsung isi tabel database — tiga jendela ini membongkar 90% masalah integrasi.
Latihan Kelas: Sambungkan Layar Daftar Produk ke API
Kerjakan berpasangan, 20 menit. Gunakan proyek React Native dan Flask dari Pertemuan 8–11 yang sudah Anda miliki.
Instruksi
Buat state loading, produkList, dan error (rujuk Slide 13–14)
Panggil GET /api/produk di dalam useEffect saat layar dibuka
Tampilkan spinner saat loading, pesan error saat gagal, daftar produk saat berhasil
Tambahkan tombol "Hapus" yang memanggil DELETE /api/produk/:id, lalu muat ulang daftar
Gunakan checklist debugging di Slide 18 kalau ada langkah yang tidak berjalan — periksa client, server, lalu database secara berurutan.
Rangkuman & Menuju Pertemuan 13
Istilah
Arti Singkat
Base URL
Alamat dasar server yang dituju semua request
Token / Authorization
Bukti identitas yang disertakan di header tiap request
Loading state
Kondisi aplikasi sedang menunggu jawaban server
try/catch
Pola menangkap & menangani kegagalan request
Pagination
Mengirim data per halaman untuk hemat bandwidth
Pertemuan 13: Evaluasi, debugging, dan penyusunan laporan proyek akhir secara sistematis. Tugas: pastikan latihan Slide 19 berjalan penuh (loading, error, dan hapus data) sebagai fondasi proyek akhir Anda.