REST API: CRUD dengan Express Router
Merancang REST API yang rapi: resource, metode HTTP, status code yang tepat, dan memecah route dengan Router.
Apa itu REST API?
REST adalah gaya merancang API web: segala sesuatu dipandang sebagai resource (benda) yang diidentifikasi oleh URL, dan dioperasikan dengan metode HTTP. Klien (aplikasi web, mobile) dan server bertukar data, umumnya berformat JSON.
CRUD ↔ metode HTTP
| Operasi | Metode & URL | Sukses | Gagal umum |
|---|---|---|---|
| Daftar | GET /api/tugas | 200 + array | — |
| Detail | GET /api/tugas/:id | 200 + objek | 404 |
| Buat | POST /api/tugas | 201 + objek baru | 400 |
| Ganti seluruhnya | PUT /api/tugas/:id | 200 + objek | 400, 404 |
| Ubah sebagian | PATCH /api/tugas/:id | 200 + objek | 404 |
| Hapus | DELETE /api/tugas/:id | 204 (tanpa isi) | 404 |
Aturan desain URL
- Pakai kata benda jamak, bukan kata kerja:
/api/tugas, bukan/api/ambilSemuaTugas. - Hierarki untuk relasi:
/api/pengguna/5/pesanan. - Filter, urutan, dan halaman lewat query string:
/api/tugas?selesai=true&halaman=2. - Versi API:
/api/v1/...agar perubahan di masa depan tidak merusak klien lama. - Respons konsisten: objek untuk satu data, array untuk banyak data,
{ "error": "..." }untuk kegagalan.
Express Router: memecah route
Alih-alih menumpuk semua route di satu berkas, express.Router() membuat "mini-aplikasi" yang bisa dipasang pada awalan path:
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => { /* GET /api/tugas */ });
router.get('/:id', (req, res) => { /* GET /api/tugas/5 */ });
router.post('/', (req, res) => { /* POST /api/tugas */ });
const app = express();
app.use(express.json());
app.use('/api/tugas', router); // semua route di atas diawali /api/tugas
Menemukan data berdasarkan id
function cari(req, res) {
const t = data.find((x) => x.id === Number(req.params.id));
if (!t) { res.status(404).json({ error: 'Tugas tidak ditemukan' }); return null; }
return t;
}
PUT vs PATCH
- PUT: klien mengirim representasi lengkap; menggantikan data lama.
- PATCH: klien hanya mengirim bagian yang berubah.
Penyimpanan
Di latihan ini data disimpan di array dalam memori (hilang saat server restart). Aplikasi nyata memakai database (PostgreSQL, MongoDB, SQLite) — lapisan akses datanya diganti, sementara bentuk API tetap sama.
Menguji API
Alat: curl, Postman, Thunder Client (VS Code), atau tes otomatis. Contoh: curl -X POST localhost:3000/api/tugas -H "Content-Type: application/json" -d '{"judul":"Belajar Node"}'.