Membuat REST API Sederhana dengan Node.js dan Express di Debian 13

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:

bash
node -v
npm -v

Buat folder proyek:

bash
mkdir -p ~/api-sederhana && cd ~/api-sederhana
npm init -y
npm install express

Langkah 1: Struktur Proyek

Gunakan struktur minimal namun rapi:

bash
api-sederhana/
  package.json
  server.js

Langkah 2: Membuat Server Express

Isi server.js:

javascript
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:

bash
node server.js

Uji dari terminal lain:

bash
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 nama tidak 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:

javascript
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:

bash
[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.target

Aktifkan:

bash
sudo systemctl daemon-reload
sudo systemctl enable --now api-sederhana
sudo systemctl status api-sederhana

Melihat log:

bash
journalctl -u api-sederhana -f
Untuk perbandingan PM2 vs systemd, baca artikel memilih PM2 atau systemd untuk aplikasi 24/7.

Tabel Endpoint

MethodEndpointFungsi
GET/Cek status API
GET/itemsAmbil semua data
GET/items/:idAmbil satu data
POST/itemsTambah 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.

Artikel Terkait