NodeJS #18: API dengan Parameter – Menangani Data Dinamis

🍭 NodeJS #18: API dengan Parameter – Menangani Data Dinamis

Halo, calon backend developer! 👋

Di tutorial sebelumnya (NodeJS #17) kita sudah membuat API sederhana dengan endpoint GET yang mengembalikan data statis. Sekarang kita akan belajar membuat API yang lebih dinamis dengan menerima parameter dari URL. Parameter memungkinkan kita mengirim data ke API, misalnya nama pengguna, ID produk, atau kata kunci pencarian. API akan merespons dengan data yang sesuai dengan parameter tersebut. Yuk, kita pelajari! 🚀

🧐 Jenis-Jenis Parameter di URL

Ada dua cara umum mengirim parameter ke API melalui URL:

  1. Route Parameter (Parameter di Path) – Bagian dari URL yang berubah, misal /api/biodata/budi di mana "budi" adalah parameter. Kita menangkapnya dengan req.params.
  2. Query Parameter – Parameter yang ditambahkan setelah tanda tanya (?), misal /api/cari?nama=budi&umur=12. Kita menangkapnya dengan req.query.

Kita akan coba keduanya dengan contoh sederhana: API biodata dan API pencarian.

📁 Persiapan Proyek

Buat folder baru, misal api-parameter. Inisialisasi npm dan instal express:

npm init -y
npm install express

Buat file app.js.

🎯 Contoh 1: Route Parameter – Biodata berdasarkan Nama

Kita akan membuat endpoint /api/biodata/:nama yang mengembalikan biodata orang dengan nama tersebut. Karena kita belum punya database, kita akan gunakan data dummy.

Buka app.js dan tulis kode berikut:

const express = require('express');
const app = express();
const port = 3000;

// Data dummy biodata (bisa diganti dengan database nanti)
const biodata = {
  budi: { nama: 'Budi', umur: 12, kota: 'Jakarta', hobi: ['membaca', 'bermain bola'] },
  ani: { nama: 'Ani', umur: 13, kota: 'Bandung', hobi: ['menari', 'menyanyi'] },
  cici: { nama: 'Cici', umur: 11, kota: 'Surabaya', hobi: ['menggambar', 'bersepeda'] }
};

// Endpoint dengan route parameter :nama
app.get('/api/biodata/:nama', (req, res) => {
  const nama = req.params.nama.toLowerCase(); // ambil parameter nama, ubah ke huruf kecil
  const data = biodata[nama];

  if (data) {
    res.json(data);
  } else {
    res.status(404).json({ pesan: `Biodata untuk ${nama} tidak ditemukan` });
  }
});

app.listen(port, () => {
  console.log(`API berjalan di http://localhost:${port}`);
});

Penjelasan:

  • req.params.nama mengambil nilai dari parameter :nama di URL.
  • Kita gunakan toLowerCase() agar tidak case-sensitive (misal "Budi" sama dengan "budi").
  • Kita cek apakah nama ada di objek biodata. Jika ada, kirim JSON. Jika tidak, kirim status 404 dengan pesan error.

Jalankan dengan node app.js, lalu coba akses:

  • http://localhost:3000/api/biodata/budi → akan menampilkan data Budi.
  • http://localhost:3000/api/biodata/ani → data Ani.
  • http://localhost:3000/api/biodata/tono → pesan tidak ditemukan.
💡 Catatan: Route parameter sangat cocok untuk mengidentifikasi sumber daya spesifik, seperti ID pengguna atau slug artikel.

🔍 Contoh 2: Multiple Route Parameters

Kita juga bisa menggunakan lebih dari satu parameter. Misal kita ingin mengambil data berdasarkan nama dan properti tertentu. Buat endpoint /api/biodata/:nama/:properti.

app.get('/api/biodata/:nama/:properti', (req, res) => {
  const nama = req.params.nama.toLowerCase();
  const properti = req.params.properti.toLowerCase();
  const data = biodata[nama];

  if (!data) {
    return res.status(404).json({ pesan: `Biodata untuk ${nama} tidak ditemukan` });
  }

  if (data.hasOwnProperty(properti)) {
    res.json({ [properti]: data[properti] });
  } else {
    res.status(404).json({ pesan: `Properti ${properti} tidak ditemukan untuk ${nama}` });
  }
});

Coba akses: http://localhost:3000/api/biodata/budi/umur → akan mengembalikan { "umur": 12 }. Akses /budi/hobi → array hobi.

🔎 Contoh 3: Query Parameter – Pencarian

Query parameter biasanya digunakan untuk pencarian, filter, atau opsi tambahan. Kita akan buat endpoint /api/cari yang menerima parameter ?nama= dan ?kota= untuk mencari orang di data biodata.

// Endpoint pencarian dengan query parameter
app.get('/api/cari', (req, res) => {
  const { nama, kota } = req.query;
  let hasil = Object.values(biodata); // ubah objek menjadi array

  // Filter berdasarkan nama jika ada
  if (nama) {
    hasil = hasil.filter(b => b.nama.toLowerCase().includes(nama.toLowerCase()));
  }

  // Filter berdasarkan kota jika ada
  if (kota) {
    hasil = hasil.filter(b => b.kota.toLowerCase().includes(kota.toLowerCase()));
  }

  res.json(hasil);
});

Coba akses:

  • http://localhost:3000/api/cari?nama=bu → mencari yang namanya mengandung "bu" (Budi).
  • http://localhost:3000/api/cari?kota=bandung → menampilkan Ani.
  • http://localhost:3000/api/cari?nama=i&kota=jakarta → filter kombinasi (Budi karena nama mengandung 'i' dan kota Jakarta).
💡 Query parameter bersifat opsional. Jika tidak dikirim, kita bisa mengabaikan filter atau mengembalikan semua data.

🧪 Contoh 4: Parameter dengan Validasi Sederhana

Kadang kita perlu memastikan parameter yang dikirim valid, misal ID harus angka. Kita bisa tambahkan pengecekan.

// Contoh dengan ID numerik
const produk = [
  { id: 1, nama: 'Pensil', harga: 2000 },
  { id: 2, nama: 'Buku', harga: 5000 }
];

app.get('/api/produk/:id(\\d+)', (req, res) => {
  const id = parseInt(req.params.id);
  const item = produk.find(p => p.id === id);
  if (item) {
    res.json(item);
  } else {
    res.status(404).json({ pesan: 'Produk tidak ditemukan' });
  }
});

Perhatikan :id(\\d+) adalah pola regex yang memastikan parameter hanya angka. Jika bukan angka, route tidak akan cocok dan dilanjutkan ke middleware berikutnya (bisa 404).

📦 Menggabungkan Route Parameter dan Query

Kita bisa menggabungkan keduanya, misal /api/biodata/budi?detail=umur yang mengembalikan hanya umur. Atau /api/produk/1?fields=nama,harga. Silakan eksplorasi.

🧠 Tips Penting

  • Gunakan nama parameter yang deskriptif dan konsisten.
  • Validasi input – jangan percaya apapun dari pengguna. Pastikan parameter sesuai harapan.
  • Berikan pesan error yang jelas agar pengguna API tahu apa yang salah.
  • Perhatikan urutan route – route dengan parameter tetap (seperti /api/cari) harus ditulis sebelum route dengan parameter dinamis yang mungkin cocok dengan string "cari".

🧪 Latihan Mandiri

  1. Buat endpoint /api/siswa/:kelas yang mengembalikan daftar siswa dalam kelas tertentu (gunakan data dummy).
  2. Buat endpoint /api/buku/search?judul=... dan ?penulis=... untuk mencari buku.
  3. Buat endpoint /api/kalkulator/tambah?x=5&y=3 yang mengembalikan hasil penjumlahan.
  4. Tambahkan validasi: jika x atau y bukan angka, kembalikan status 400.

📚 Rangkuman

Jenis Parameter Cara Mengakses Contoh URL
Route Parameter req.params.nama /api/biodata/budi
Query Parameter req.query.nama /api/cari?nama=budi

🏁 Penutup

Sekarang kamu sudah bisa membuat API dinamis yang menerima parameter dari URL. Ini adalah fondasi penting untuk membangun API yang powerful. Di tutorial selanjutnya (NodeJS #19) kita akan belajar menyimpan data ke file JSON – membuat database sederhana tanpa perlu database sungguhan. Sampai jumpa!

Jangan lupa untuk mencoba latihan dan bereksperimen sendiri. Kalau ada pertanyaan, tulis di komentar. Selamat coding! 💻😊


Ditulis dengan ❤️ untuk para pemula yang ingin menjadi programmer handal.

Lebih baru Lebih lama

نموذج الاتصال