REST API (Representational State Transfer Application Programming Interface) adalah standar komunikasi antar sistem yang paling banyak digunakan di dunia web saat ini. Dengan REST API, server dan client bisa saling bertukar data secara fleksibel, menggunakan protokol HTTP standar seperti GET, POST, PUT, dan DELETE.
Express.js, sebuah framework minimalis untuk Node.js, memungkinkan kita membuat REST API dengan cepat, efisien, dan mudah di-maintain. Artikel ini akan membahas secara lengkap cara membuat REST API dengan Express.js, termasuk praktik terbaik untuk performa dan stabilitas.
Contents
- 1 1. Apa itu Express.js?
- 2 2. Persiapan Proyek
- 3 3. Membuat Server Dasar Express
- 4 4. Membuat REST API CRUD Sederhana
- 5 5. Middleware: Kunci Stabilitas dan Keamanan
- 6 6. Tips Performa REST API Express
- 7 7. Validasi dan Sanitasi Data
- 8 8. Struktur Proyek yang Rapi
- 9 9. Testing REST API
- 10 10. High-Concurrency dan Scalability
- 11 11. Logging & Monitoring
- 12 12. Keamanan REST API
- 13 Kesimpulan
1. Apa itu Express.js?
Express.js adalah framework web untuk Node.js yang mempermudah pembuatan server, routing, middleware, dan handling HTTP request. Kelebihan Express antara lain:
- Ringan dan fleksibel: Hanya menambahkan fitur yang diperlukan.
- Middleware support: Memudahkan pengelolaan request/response.
- Routing mudah: Mendefinisikan endpoint REST dengan cepat.
- Ekosistem besar: Banyak plugin dan package tambahan.
Express digunakan untuk membuat server REST API, aplikasi web, atau microservice dengan Node.js. Bagi developer yang ingin membuat API yang cepat, Express adalah salah satu pilihan terbaik.
2. Persiapan Proyek
Sebelum mulai coding, pastikan Node.js sudah terinstall. Kemudian buat folder proyek dan inisialisasi dengan npm:
Instal Express:
Untuk memudahkan development, bisa install nodemon agar server restart otomatis saat file berubah:
Tambahkan script di package.json:
3. Membuat Server Dasar Express
Buat file index.js dan tulis kode berikut:
Penjelasan:
-
express()→ membuat instance aplikasi Express. -
app.use(express.json())→ middleware untuk parsing JSON body. -
app.get("/")→ mendefinisikan endpoint root. -
app.listen(PORT)→ menjalankan server pada port tertentu.
4. Membuat REST API CRUD Sederhana
Biasanya REST API terdiri dari operasi CRUD: Create, Read, Update, Delete. Kita akan buat endpoint /users.
let users = [ { id: 1, name: "Ali" }, { id: 2, name: "Budi" } ];
// GET all users
app.get("/users", (req, res) => { res.json(users); });
// GET user by id
app.get("/users/:id", (req, res) =>
{ const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).json({ error: "User not found" });
res.json(user); });
// POST create user
app.post("/users", (req, res) =>
{ const { name } = req.body;
const newUser = { id: users.length + 1, name };
users.push(newUser);
res.status(201).json(newUser); });
// PUT update user
app.put("/users/:id", (req, res) =>
{ const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).json({ error: "User not found" });
user.name = req.body.name || user.name; res.json(user); });
// DELETE user
app.delete("/users/:id", (req, res) =>
{ users = users.filter(u => u.id !== parseInt(req.params.id));
res.json({ message: "User deleted" }); });
✅ Dengan ini, kita sudah memiliki REST API CRUD lengkap.
5. Middleware: Kunci Stabilitas dan Keamanan
Middleware adalah fungsi yang dieksekusi sebelum endpoint dipanggil. Beberapa middleware penting:
-
Logging: Memantau request masuk.
-
Error Handling: Menangani error global.
-
CORS: Jika API diakses dari domain berbeda.
-
Rate Limiting: Membatasi jumlah request untuk mencegah overload.
6. Tips Performa REST API Express
- Non-blocking code: Semua operasi I/O (database, file) gunakan async/await. Hindari operasi blocking.
- Connection pooling: Untuk database (MySQL/PostgreSQL/MongoDB), gunakan pool untuk mengurangi overhead koneksi.
- Caching: Gunakan Redis/memory cache untuk data yang sering dibaca.
- Minimalkan middleware berat: Setiap middleware menambah overhead request.
- Gunakan cluster/PM2: Agar server dapat memanfaatkan multi-core CPU.
-
Gzip compression: Untuk response besar, gunakan
compressionmiddleware.
7. Validasi dan Sanitasi Data
Untuk REST API yang stabil, validasi input penting. Bisa pakai Joi atau express-validator.
Contoh express-validator:
8. Struktur Proyek yang Rapi
Untuk REST API skala menengah/besar, pisahkan kode agar lebih maintainable:
-
Routes: Endpoint Express
-
Controllers: Logika bisnis
-
Models: Database schema
-
Middleware: Logging, auth, rate limit, dll
9. Testing REST API
-
Postman / Insomnia: Tool GUI untuk testing REST API.
-
Automated Test: Pakai Jest / Mocha + Supertest
Testing penting agar API tetap stabil saat ada perubahan kode.
10. High-Concurrency dan Scalability
Jika REST API harus handle ribuan request per detik, beberapa strategi:
-
Cluster mode: Node.js single-threaded, gunakan cluster/PM2 untuk multi-core.
-
Async database calls: Hindari query blocking.
-
Caching layer: Redis/Memcached untuk response sering dibaca.
-
Load balancer: Nginx atau HAProxy untuk distribusi request.
-
Connection keep-alive: Kurangi overhead TCP.
11. Logging & Monitoring
Untuk REST API production, monitoring adalah kunci:
-
Morgan: Middleware logging HTTP request.
-
Winston / Pino: Logging tingkat lanjut, bisa ke file atau remote logging service.
-
Monitoring: Gunakan tools seperti PM2 monitoring, Grafana, Prometheus.
12. Keamanan REST API
Beberapa tips keamanan:
-
HTTPS wajib → jangan kirim data sensitif lewat HTTP.
-
CORS hanya untuk domain yang diperlukan.
-
Rate limiting → cegah DDoS.
-
Input validation & sanitasi → cegah injection attack.
-
Authentication & Authorization: JWT, OAuth, atau API Key untuk endpoint sensitif.
Kesimpulan
Membuat REST API dengan Express.js itu:
- Cepat: Express minimalis, memudahkan endpoint CRUD sederhana.
- Fleksibel: Bisa scale hingga high-concurrency dengan async handling, cluster, dan caching.
- Stabil: Dengan middleware, rate limiting, dan proper error handling.
- Maintainable: Dengan struktur proyek terpisah (routes, controllers, models).
Ringkasan Best Practices:
- Gunakan async/await untuk semua operasi async.
- Pisahkan routes, controllers, dan models.
- Tambahkan middleware logging, error handling, rate limiting.
- Gunakan database connection pooling dan caching.
- Gunakan cluster / PM2 untuk concurrency tinggi.
- Validasi & sanitasi input untuk stabilitas dan keamanan.
- Monitoring & logging untuk production.
Dengan setup ini, REST API Express.js bisa cepat, stabil, dan scalable, baik untuk proyek kecil maupun enterprise.