proyekfetchapi-clientMahir5 mnt baca

Proyek Mini: API Client Lengkap

Membangun API client kecil dengan fetch: daftar, detail, pencarian dengan debounce, dan error handling.

Saatnya merakit semuanya

Kamu sudah belajar request, method, status code, header, JSON, fetch, timeout, error handling, dan auth. Modul ini adalah ujian praktiknya: bangun API client mini, satu modul JavaScript yang membungkus semua pengetahuan itu menjadi fungsi yang siap dipakai project sungguhan.

Kenapa API client terpusat itu penting

Project tanpa API client terpusat biasanya berakhir dengan fetch berserakan di 30 file, masing-masing dengan cara handle error berbeda. Saat token berubah format atau base URL pindah, kamu harus mengedit 30 tempat. API client terpusat memindahkan semua logika HTTP ke satu file: base URL, header auth, timeout, retry, dan error mapping. Perubahan cukup di satu tempat.

Contoh 1: kerangka API client

javascript
const API_URL = "https://jsonplaceholder.typicode.com";

async function api(path, options) {
  const controller = new AbortController();
  const timer = setTimeout(function() { controller.abort(); }, 10000);

  try {
    const response = await fetch(API_URL + path, {
      headers: { "Content-Type": "application/json" },
      ...options,
      signal: controller.signal
    });
    if (response.status === 401) throw new Error("Sesi berakhir, login ulang");
    if (!response.ok) throw new Error("HTTP " + response.status);
    if (response.status === 204) return null;
    return await response.json();
  } finally {
    clearTimeout(timer);
  }
}

Satu fungsi menangani base URL, timeout 10 detik, auth error, dan response kosong 204. Semua request di aplikasimu kini cukup memanggil api("/users/1").

Contoh 2: memakai client untuk CRUD lengkap

javascript
const daftar = await api("/posts?_limit=5");
console.log("Dapat", daftar.length, "post");

const baru = await api("/posts", {
  method: "POST",
  body: JSON.stringify({ title: "Halo", userId: 1 })
});
console.log("Dibuat dengan id", baru.id);

await api("/posts/1", { method: "DELETE" });
console.log("Dihapus");

Tiga operasi (baca, buat, hapus) dengan pola yang sama persis. Perhatikan betapa bersihnya kode pemanggil: tidak ada header berulang, tidak ada try/catch timeout di setiap tempat, karena semuanya sudah ditangani di dalam api().

Kesalahan umum

Salah: mencampur logika HTTP dengan logika tampilan. Fungsi fetch yang sekaligus mengupdate DOM sulit di-test dan dipakai ulang. Yang benar: API client hanya mengurus HTTP dan mengembalikan data; rendering urusan komponen lain.

Salah: tidak memisahkan konfigurasi. Base URL tertulis langsung di setiap fetch. Yang benar: satu konstanta API_URL yang mudah diganti antar environment (dev, staging, production).

Salah: menelan error diam-diam. catch kosong agar "tidak error" justru menyembunyikan bug. Yang benar: selalu teruskan error yang bermakna ke pemanggil, atau tampilkan ke user.

Tugas akhirmu

Modul ini punya assignment: bangun API client versimu sendiri untuk JSONPlaceholder, lengkap dengan GET ber-pagination, POST, dan penanganan 404/500 yang ramah. Kirim kodemu dan biarkan AI tutor menilai: ia akan memeriksa bug, menyarankan perbaikan, dan menunjukkan kesalahan syntax. Anggap ini simulasi code review di dunia kerja.

Catatan teknis: Di project profesional, pola ini sering dibungkus library seperti axios instance atau TanStack Query. Tapi memahami cara membuatnya dari nol dengan fetch membuatmu paham apa yang sebenarnya dilakukan library-library itu.

Tantangan

Rancang dulu, baru kode

Sebelum mengerjakan tugas di bawah, tulis rancanganmu (boleh Bahasa Indonesia):

  1. Fungsi apa saja yang ada di api.js-mu? Tulis nama + tujuannya.
  2. State apa saja yang dibutuhkan tiap fitur (daftar, detail, cari, buat)?
  3. Di mana debounce dipasang dan kenapa di sana?

Kumpulkan rancangan ini bersama kodemu saat submit tugas.

Tugas

API Client Mini

Bangun API client mini sesuai brief di materi (daftar, detail, pencarian debounce, form buat, error handling). Tulis satu file JavaScript berisi lapisan API (api.js-mu) + logika UI-nya. Sertakan rancangan dari tantangan di atas sebagai komentar di baris pertama.

Kirim kodemu lewat form di bawah. AI tutor akan menilai: kelengkapan fitur, error handling, pemisahan lapisan API/UI, dan kualitas kode.

Kriteria penilaian:

  • Semua 5 fitur berfungsi (daftar, detail, cari, buat, error handling)
  • Ada lapisan api() terpisah, tidak ada fetch mentah di UI
  • Pencarian memakai debounce
  • 404 dan error lain ditangani dengan pesan ramah
  • Kode rapi dan mudah dibaca

AI tutor akan memeriksa bug, kesalahan syntax, dan memberi saran perbaikan.

Kuis Bab

Uji pemahamanmu: Bab 5: Keamanan API

Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".

1.Kenapa Basic Auth tanpa HTTPS sangat berbahaya?

2.Tiga bagian JWT dipisahkan titik adalah...

3.Apa fungsi refresh token dalam pola access + refresh token?

4.Dalam alur OAuth authorization code, kapan password user dipakai?

5.Aplikasi kalkulator meminta scope drive + email padahal cuma butuh nama user. Ini...