🍭 NodeJS #20: Membuat API POST untuk Menambah Data
Halo, calon backend developer! 👋
Di tutorial sebelumnya (NodeJS #19) kita sudah belajar membaca dan menulis file JSON sebagai database sederhana. Sekarang kita akan fokus pada membuat endpoint POST yang menerima data dari client (browser atau aplikasi) dan menyimpannya ke file JSON. Ini adalah fondasi penting untuk membangun API yang bisa menerima input dari pengguna. Yuk, kita praktik! 🚀
🎯 Apa yang Akan Kita Buat?
Kita akan membuat API untuk data buah (atau bisa diganti dengan data lain). Endpoint yang akan dibuat:
POST /api/buah– menerima data buah baru (nama, warna, harga) dalam format JSON, lalu menyimpannya ke filebuah.json.- Data yang diterima akan divalidasi sederhana.
- Server akan mengembalikan data yang baru ditambahkan beserta status 201 (Created).
📁 Persiapan Proyek
Buat folder baru, misal api-post. Inisialisasi npm dan instal express:
npm init -y
npm install express
Buat struktur folder:
api-post/
├── data/
│ └── buah.json
├── app.js
└── package.json
Isi file buah.json dengan array kosong atau data awal:
[
{ "id": 1, "nama": "Apel", "warna": "Merah", "harga": 5000 },
{ "id": 2, "nama": "Jeruk", "warna": "Oranye", "harga": 7000 }
]
📝 Membuat Server Dasar
Buka app.js dan tulis kode dasar berikut:
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const port = 3000;
// Middleware untuk membaca JSON dari body request
app.use(express.json());
// Path ke file data
const dataFile = path.join(__dirname, 'data', 'buah.json');
// Fungsi baca data (synchronous, untuk sederhana)
function bacaData() {
const data = fs.readFileSync(dataFile, 'utf8');
return JSON.parse(data);
}
// Fungsi tulis data
function tulisData(data) {
fs.writeFileSync(dataFile, JSON.stringify(data, null, 2));
}
// ENDPOINT GET semua buah (untuk mengecek)
app.get('/api/buah', (req, res) => {
const buah = bacaData();
res.json(buah);
});
app.listen(port, () => {
console.log(`Server berjalan di http://localhost:${port}`);
});
Jalankan dengan node app.js dan coba akses http://localhost:3000/api/buah untuk memastikan data terbaca.
➕ Membuat Endpoint POST
Sekarang kita tambahkan endpoint POST untuk menambah data buah baru.
app.post('/api/buah', (req, res) => {
// 1. Baca data yang ada
const buah = bacaData();
// 2. Ambil data dari body request
const { nama, warna, harga } = req.body;
// 3. Validasi: pastikan semua field ada
if (!nama || !warna || !harga) {
return res.status(400).json({
pesan: 'Data tidak lengkap. Harap kirim nama, warna, dan harga.'
});
}
// 4. Buat ID baru (mengambil ID terbesar + 1)
const idBaru = buah.length > 0 ? Math.max(...buah.map(b => b.id)) + 1 : 1;
// 5. Buat objek buah baru
const buahBaru = {
id: idBaru,
nama: nama,
warna: warna,
harga: harga
};
// 6. Tambahkan ke array
buah.push(buahBaru);
// 7. Simpan ke file
tulisData(buah);
// 8. Kirim respons sukses dengan status 201 (Created)
res.status(201).json({
pesan: 'Buah berhasil ditambahkan',
data: buahBaru
});
});
Penjelasan langkah-langkah:
req.bodyberisi data JSON yang dikirim client. Middlewareexpress.json()diperlukan agar bisa membaca body.- Validasi: jika ada field yang kosong, kita kirim status 400 (Bad Request) dan pesan error.
- ID baru dibuat dengan mencari ID terbesar dari data yang ada, lalu ditambah 1. Jika array kosong, ID dimulai dari 1.
- Data baru ditambahkan ke array, lalu disimpan ke file dengan
tulisData. - Respons dikirim dengan status 201 (Created) dan menyertakan data yang baru ditambahkan.
🧪 Menguji dengan Postman
Untuk menguji endpoint POST, kita perlu alat seperti Postman atau Insomnia. Buka Postman, buat request baru:
- Method: POST
- URL:
http://localhost:3000/api/buah - Headers:
Content-Type: application/json - Body (raw JSON):
{ "nama": "Mangga", "warna": "Kuning", "harga": 10000 }
Klik Send. Jika berhasil, akan mendapat respons seperti:
{
"pesan": "Buah berhasil ditambahkan",
"data": {
"id": 3,
"nama": "Mangga",
"warna": "Kuning",
"harga": 10000
}
}
Cek juga file buah.json untuk memastikan data tersimpan.
curl dari terminal:
curl -X POST -H "Content-Type: application/json" -d '{"nama":"Mangga","warna":"Kuning","harga":10000}' http://localhost:3000/api/buah
🛡️ Validasi Lebih Lanjut
Kita bisa menambahkan validasi lain, misalnya:
- Harga harus angka positif.
- Nama tidak boleh duplikat (opsional).
Contoh validasi harga:
if (typeof harga !== 'number' || harga <= 0) {
return res.status(400).json({ pesan: 'Harga harus angka positif' });
}
Cek duplikat nama:
const exist = buah.some(b => b.nama.toLowerCase() === nama.toLowerCase());
if (exist) {
return res.status(400).json({ pesan: 'Buah dengan nama tersebut sudah ada' });
}
📂 Menangani Error File
Operasi file bisa gagal (misal file tidak ada, permission denied). Kita bisa bungkus dengan try-catch.
function bacaData() {
try {
const data = fs.readFileSync(dataFile, 'utf8');
return JSON.parse(data);
} catch (err) {
// Jika file belum ada, kembalikan array kosong
return [];
}
}
function tulisData(data) {
try {
fs.writeFileSync(dataFile, JSON.stringify(data, null, 2));
} catch (err) {
console.error('Gagal menulis file:', err);
}
}
Di route POST, kita juga perlu menangani kemungkinan error saat menulis. Jika gagal, kirim status 500.
🧪 Latihan Mandiri
- Buat endpoint POST untuk data siswa (field: nama, kelas, nilai). Simpan di file
data/siswa.json. - Tambahkan validasi: nilai harus antara 0-100, kelas tidak boleh kosong.
- Buat endpoint GET untuk melihat semua siswa.
- Uji dengan Postman.
📚 Rangkuman
| Komponen | Keterangan |
|---|---|
| Method POST | Digunakan untuk mengirim data baru ke server. |
Middleware express.json() |
Wajib agar bisa membaca JSON dari body. |
| Validasi | Periksa kelengkapan dan keabsahan data sebelum menyimpan. |
| Generate ID | Biasanya dari ID terbesar + 1, atau gunakan library seperti uuid. |
| Status 201 | Created, menandakan data berhasil dibuat. |
🏁 Penutup
Sekarang kamu sudah bisa membuat API POST yang menerima data dan menyimpannya ke file JSON. Ini adalah langkah penting untuk membangun aplikasi yang interaktif. Di tutorial selanjutnya (NodeJS #21) kita akan belajar menampilkan data dari file JSON di halaman web dengan EJS, menggabungkan API dan tampilan. 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.