Pendahuluan
REST API adalah jembatan antara frontend, bot Telegram, dan aplikasi mobile dengan database di server. Dengan Node.js dan Express, Anda bisa membuat API JSON dalam hitungan menit. Artikel ini membahas langkah lengkap membuat REST API sederhana di Debian 13, dari instalasi, routing, validasi, hingga menjalankannya sebagai layanan systemd.
Persiapan
Pastikan Node.js sudah terpasang. Jika belum, ikuti panduan memasang Node.js di Debian 13, lalu verifikasi:
node -v
npm -vBuat folder proyek:
mkdir -p ~/api-sederhana && cd ~/api-sederhana
npm init -y
npm install expressLangkah 1: Struktur Proyek
Gunakan struktur minimal namun rapi:
api-sederhana/
package.json
server.jsLangkah 2: Membuat Server Express
Isi server.js:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
let items = [
{ id: 1, nama: 'Bot Al-Quran' },
{ id: 2, nama: 'Bot Hadis' }
];
app.get('/', (req, res) => {
res.json({ status: 'ok', pesan: 'API berjalan' });
});
app.get('/items', (req, res) => {
res.json(items);
});
app.get('/items/:id', (req, res) => {
const item = items.find((x) => x.id === Number(req.params.id));
if (!item) return res.status(404).json({ error: 'Data tidak ditemukan' });
res.json(item);
});
app.post('/items', (req, res) => {
const { nama } = req.body || {};
if (!nama || String(nama).trim() === '') {
return res.status(400).json({ error: 'Field nama wajib diisi' });
}
const baru = { id: Date.now(), nama: String(nama).trim() };
items.push(baru);
res.status(201).json(baru);
});
app.listen(PORT, () => {
console.log(`API berjalan di http://localhost:${PORT}`);
});Jalankan:
node server.jsUji dari terminal lain:
curl http://localhost:3000/items
curl -X POST http://localhost:3000/items -H "Content-Type: application/json" -d '{"nama":"Bot Baru"}'Langkah 3: Validasi dan Error Handling
Contoh di atas sudah mencakup:
- Validasi
namatidak boleh kosong (400 Bad Request). - Penanganan data tidak ditemukan (404 Not Found).
- Format JSON konsisten
{ status, data, error }.
Untuk proyek besar, pisahkan validasi ke middleware:
function wajibNama(req, res, next) {
if (!req.body || !req.body.nama) {
return res.status(400).json({ error: 'Field nama wajib diisi' });
}
next();
}
app.post('/items', wajibNama, (req, res) => {
res.status(201).json({ id: Date.now(), nama: req.body.nama });
});Langkah 4: Menjalankan 24/7 dengan Systemd
Buat file layanan /etc/systemd/system/api-sederhana.service:
[Unit]
Description=REST API Sederhana
After=network.target
[Service]
Type=simple
User=debian
WorkingDirectory=/home/debian/api-sederhana
ExecStart=/usr/bin/node /home/debian/api-sederhana/server.js
Restart=always
Environment=PORT=3000
[Install]
WantedBy=multi-user.targetAktifkan:
sudo systemctl daemon-reload
sudo systemctl enable --now api-sederhana
sudo systemctl status api-sederhanaMelihat log:
journalctl -u api-sederhana -fUntuk perbandingan PM2 vs systemd, baca artikel memilih PM2 atau systemd untuk aplikasi 24/7.
Tabel Endpoint
| Method | Endpoint | Fungsi |
|---|---|---|
| GET | / | Cek status API |
| GET | /items | Ambil semua data |
| GET | /items/:id | Ambil satu data |
| POST | /items | Tambah data baru |
Kelebihan dan Kekurangan
Kelebihan Express:
- Ringan dan cepat dipelajari.
- Ekosistem middleware sangat luas.
- Cocok untuk API bot dan webhook.
Kekurangan:
- Validasi dan ORM perlu pustaka tambahan.
- Perlu reverse proxy (Nginx/Caddy) untuk HTTPS dan domain.
Kesimpulan
REST API sederhana cukup dengan Express, routing JSON, dan validasi dasar. Setelah berjalan lokal, daftarkan sebagai layanan systemd dan pasang reverse proxy Caddy atau Nginx agar bisa diakses lewat domain dengan HTTPS otomatis.