REST API dengan Express.js: Panduan Lengkap untuk Pemula

REST API dengan Express.js: Panduan Lengkap untuk Pemula

Update 05/12/25 · Read 6 min

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.


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:

mkdir express-rest-api
cd express-rest-api
npm init -y

Instal Express:

npm install express

Untuk memudahkan development, bisa install nodemon agar server restart otomatis saat file berubah:

npm install --save-dev nodemon

Tambahkan script di package.json:

"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}

3. Membuat Server Dasar Express

Buat file index.js dan tulis kode berikut:

import express from "express";

const app = express();
const PORT = 3000;

// Middleware untuk parsing JSON
app.use(express.json());

// Endpoint GET sederhana
app.get("/", (req, res) => {
res.send("Hello, Express REST API!");
});

app.listen(PORT, () => console.log(`Server running at http://localhost:${PORT}`));

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.

READ :  Install Node.js, MySQL, dan Express di Linux (Ubuntu/Debian) untuk Pemula

5. Middleware: Kunci Stabilitas dan Keamanan

Middleware adalah fungsi yang dieksekusi sebelum endpoint dipanggil. Beberapa middleware penting:

  1. Logging: Memantau request masuk.

app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
  1. Error Handling: Menangani error global.

app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: "Internal Server Error" });
});
  1. CORS: Jika API diakses dari domain berbeda.

import cors from "cors";
app.use(cors());
  1. Rate Limiting: Membatasi jumlah request untuk mencegah overload.

import rateLimit from "express-rate-limit";

const limiter = rateLimit({
windowMs: 60 * 1000, // 1 menit
max: 100
});
app.use(limiter);


6. Tips Performa REST API Express

  1. Non-blocking code: Semua operasi I/O (database, file) gunakan async/await. Hindari operasi blocking.
  2. Connection pooling: Untuk database (MySQL/PostgreSQL/MongoDB), gunakan pool untuk mengurangi overhead koneksi.
  3. Caching: Gunakan Redis/memory cache untuk data yang sering dibaca.
  4. Minimalkan middleware berat: Setiap middleware menambah overhead request.
  5. Gunakan cluster/PM2: Agar server dapat memanfaatkan multi-core CPU.
npm install pm2 -g
pm2 start index.js -i max
  1. Gzip compression: Untuk response besar, gunakan compression middleware.


7. Validasi dan Sanitasi Data

Untuk REST API yang stabil, validasi input penting. Bisa pakai Joi atau express-validator.

Contoh express-validator:

import { body, validationResult } from "express-validator"; app.post("/users", body("name").isString().withMessage("Name must be string"), (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const newUser = { id: users.length + 1, name: req.body.name }; users.push(newUser); res.status(201).json(newUser); } );

8. Struktur Proyek yang Rapi

Untuk REST API skala menengah/besar, pisahkan kode agar lebih maintainable:

project/
│
├─ index.js        # Server main
├─ routes/
│   └─ users.js    # Route users
├─ controllers/
│   └─ users.js    # Logic CRUD
├─ models/
│   └─ user.js     # Database model
└─ middleware/
    └─ logger.js
  • Routes: Endpoint Express

  • Controllers: Logika bisnis

  • Models: Database schema

  • Middleware: Logging, auth, rate limit, dll


9. Testing REST API

  1. Postman / Insomnia: Tool GUI untuk testing REST API.

  2. Automated Test: Pakai Jest / Mocha + Supertest

import request from "supertest";
import app from "../index.js"; test("GET /users returns 200", async () => { const res = await request(app).get("/users"); expect(res.statusCode).toBe(200); expect(res.body).toBeInstanceOf(Array); });

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.

import morgan from "morgan";
app.use(morgan("combined"));
  • Winston / Pino: Logging tingkat lanjut, bisa ke file atau remote logging service.

  • Monitoring: Gunakan tools seperti PM2 monitoring, Grafana, Prometheus.

READ :  Express.js: Framework NodeJs Untuk Aplikasi Web Cepat dan Scalable

12. Keamanan REST API

Beberapa tips keamanan:

  1. HTTPS wajib → jangan kirim data sensitif lewat HTTP.

  2. CORS hanya untuk domain yang diperlukan.

  3. Rate limiting → cegah DDoS.

  4. Input validation & sanitasi → cegah injection attack.

  5. 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:

  1. Gunakan async/await untuk semua operasi async.
  2. Pisahkan routes, controllers, dan models.
  3. Tambahkan middleware logging, error handling, rate limiting.
  4. Gunakan database connection pooling dan caching.
  5. Gunakan cluster / PM2 untuk concurrency tinggi.
  6. Validasi & sanitasi input untuk stabilitas dan keamanan.
  7. Monitoring & logging untuk production.

Dengan setup ini, REST API Express.js bisa cepat, stabil, dan scalable, baik untuk proyek kecil maupun enterprise.