stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-12
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 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.

PertemuanApa yang Sudah Dibangun
P3–P7Tampilan & navigasi React Native (front-end)
P8–P9REST API & struktur database (back-end)
P10–P11Dummy 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.

ClientReact Native(layar & interaksi)requestresponseServer (Back-end)REST API — Flask(logika bisnis)queryhasilDatabaseTabel produk,pelanggan, transaksi
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.

LangkahApa yang TerjadiDi Mana
1Kasir mengetuk tombol "Bayar"Client (React Native)
2Fungsi fetch()/axios mengirim POST berisi JSON transaksiClient → Server
3Flask menerima request, validasi data, hitung totalServer
4Server menyimpan baris baru ke tabel transaksiServer → Database
5Server mengirim response JSON "berhasil" ke clientServer → Client
6Layar menampilkan struk & state loading berhentiClient (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 server export const BASE_URL = "http://192.168.1.10:5000"; // dipakai di layar mana pun fetch(`${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?

LangkahPerhitunganNilai
1. Request dikirim client → serverlatensi jaringan120 ms
2. Server validasi & hitung logikawaktu proses server80 ms
3. Query ke database mengambil data userwaktu query45 ms
4. Response dikirim server → clientlatensi jaringan120 ms
5. Total waktu respons120 + 80 + 45 + 120365 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.

LangkahPerhitunganNilai
1. Total produk di database500 record
2. Ukuran rata-rata per record JSON2 KB
3. Tanpa pagination: total data terkirim500 × 2 KB1.000 KB
4. Dengan pagination (20/halaman): data per request20 × 2 KB40 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.

const [loading, setLoading] = useState(false); const bayarTransaksi = async () => { setLoading(true); // tampilkan spinner const res = await fetch(`${BASE_URL}/api/transaksi`, { method: "POST", body: JSON.stringify(data) }); setLoading(false); // sembunyikan spinner }; // di JSX: {loading ? <Spinner /> : <TombolBayar />}
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 CRUDAksi di Layar React NativeEndpoint yang Dipanggil
CreateIsi form produk baru, tekan "Simpan"POST /api/produk
ReadBuka halaman daftar produkGET /api/produk
UpdateUbah harga di form edit, tekan "Perbarui"PUT /api/produk/5
DeleteTekan ikon hapus pada satu produkDELETE /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

IstilahArti Singkat
Base URLAlamat dasar server yang dituju semua request
Token / AuthorizationBukti identitas yang disertakan di header tiap request
Loading stateKondisi aplikasi sedang menunggu jawaban server
try/catchPola menangkap & menangani kegagalan request
PaginationMengirim 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.