🍭 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:
- Route Parameter (Parameter di Path) – Bagian dari URL yang berubah, misal
/api/biodata/budidi mana "budi" adalah parameter. Kita menangkapnya denganreq.params. - Query Parameter – Parameter yang ditambahkan setelah tanda tanya (
?), misal/api/cari?nama=budi&umur=12. Kita menangkapnya denganreq.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.namamengambil nilai dari parameter:namadi 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.
🔍 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).
🧪 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
- Buat endpoint
/api/siswa/:kelasyang mengembalikan daftar siswa dalam kelas tertentu (gunakan data dummy). - Buat endpoint
/api/buku/search?judul=...dan?penulis=...untuk mencari buku. - Buat endpoint
/api/kalkulator/tambah?x=5&y=3yang mengembalikan hasil penjumlahan. - 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.