Building a Simple REST API with Node.js and Express - Panduan Praktis
REST API adalah fondasi dari sebagian besar aplikasi web modern. Jika Anda ingin membangun aplikasi yang bisa berkomunikasi dengan frontend, mobile app, atau layanan lain, Anda perlu memahami cara membuat API.
Tutorial ini akan menunjukkan cara membuat REST API sederhana menggunakan Node.js dan Express. Tidak ada framework kompleks, tidak ada fitur berlebihan - hanya konsep dasar yang perlu Anda pahami.
Apa Itu REST API?
REST (Representational State Transfer) adalah arsitektur untuk membangun web services. API (Application Programming Interface) adalah cara aplikasi berkomunikasi satu sama lain.
REST API menggunakan HTTP methods seperti GET, POST, PUT, DELETE untuk melakukan operasi CRUD (Create, Read, Update, Delete) pada data.
Contoh sederhana:
- GET /users - ambil semua users
- GET /users/1 - ambil user dengan ID 1
- POST /users - buat user baru
- PUT /users/1 - update user dengan ID 1
- DELETE /users/1 - hapus user dengan ID 1
Setup Project
Pertama, install Node.js dari nodejs.org. Versi LTS sudah cukup.
Buat folder baru dan initialize npm:
mkdir simple-api
cd simple-api
npm init -y
Install Express:
npm install express
Express adalah web framework minimal untuk Node.js. Ini membuat pembuatan API jauh lebih mudah daripada menggunakan http module bawaan Node.
Membuat Server Dasar
Buat file server.js:
const express = require('express');
const app = express();
const PORT = 3000;
// Middleware untuk parse JSON
app.use(express.json());
// Route dasar
app.get('/', (req, res) => {
res.json({ message: 'API is running' });
});
// Start server
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});
Jalankan dengan:
node server.js
Buka browser dan akses http://localhost:3000. Anda akan melihat response JSON.
Membuat Data Store Sederhana
Untuk contoh ini, kita akan menggunakan array di memory sebagai “database”. Untuk aplikasi production, Anda akan menggunakan database sesungguhnya seperti MongoDB atau PostgreSQL.
Tambahkan ini di server.js:
// Data store sederhana
let users = [
{ id: 1, name: 'Budi Santoso', email: 'budi@example.com' },
{ id: 2, name: 'Siti Nurhaliza', email: 'siti@example.com' }
];
let currentId = 3; // untuk auto-increment ID
Implementasi GET Routes
Tambahkan routes untuk mengambil data:
// GET semua users
app.get('/api/users', (req, res) => {
res.json(users);
});
// GET user by ID
app.get('/api/users/:id', (req, res) => {
const id = parseInt(req.params.id);
const user = users.find(u => u.id === id);
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user);
});
:id adalah route parameter. Anda bisa mengaksesnya melalui req.params.id.
Test dengan mengakses:
http://localhost:3000/api/users- semua usershttp://localhost:3000/api/users/1- user dengan ID 1
Implementasi POST Route
Untuk membuat user baru:
// POST - buat user baru
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
// Validasi sederhana
if (!name || !email) {
return res.status(400).json({ error: 'Name and email required' });
}
// Buat user baru
const newUser = {
id: currentId++,
name,
email
};
users.push(newUser);
res.status(201).json(newUser);
});
Untuk test POST request, Anda bisa menggunakan Postman, cURL, atau tool lainnya.
Contoh dengan cURL:
curl -X POST http://localhost:3000/api/users \
-H "Content-Type: application/json" \
-d '{"name":"Ahmad Fauzi","email":"ahmad@example.com"}'
Implementasi PUT Route
Untuk update user:
// PUT - update user
app.put('/api/users/:id', (req, res) => {
const id = parseInt(req.params.id);
const { name, email } = req.body;
const userIndex = users.findIndex(u => u.id === id);
if (userIndex === -1) {
return res.status(404).json({ error: 'User not found' });
}
// Update user
users[userIndex] = {
id,
name: name || users[userIndex].name,
email: email || users[userIndex].email
};
res.json(users[userIndex]);
});
Implementasi DELETE Route
Untuk hapus user:
// DELETE - hapus user
app.delete('/api/users/:id', (req, res) => {
const id = parseInt(req.params.id);
const userIndex = users.findIndex(u => u.id === id);
if (userIndex === -1) {
return res.status(404).json({ error: 'User not found' });
}
const deletedUser = users[userIndex];
users = users.filter(u => u.id !== id);
res.json({ message: 'User deleted', user: deletedUser });
});
Menambahkan Error Handling
Good practice adalah menambahkan error handling middleware:
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Something went wrong!' });
});
// 404 handler
app.use((req, res) => {
res.status(404).json({ error: 'Route not found' });
});
Letakkan ini di akhir file, setelah semua routes lainnya.
Testing API
Untuk test API secara menyeluruh, Anda bisa menggunakan:
- Postman - GUI tool yang mudah digunakan
- cURL - command line tool
- Thunder Client - VS Code extension
- HTTPie - command line tool yang lebih user-friendly dari cURL
Contoh test dengan HTTPie:
# GET all users
http GET localhost:3000/api/users
# POST new user
http POST localhost:3000/api/users name="Dewi Lestari" email="dewi@example.com"
# PUT update user
http PUT localhost:3000/api/users/1 name="Budi Santoso Updated"
# DELETE user
http DELETE localhost:3000/api/users/2
Menambahkan CORS
Jika Anda akan mengakses API dari frontend yang beda domain, Anda perlu enable CORS:
npm install cors
Tambahkan di server.js:
const cors = require('cors');
app.use(cors());
Struktur Kode yang Lebih Baik
Untuk project yang lebih besar, Anda sebaiknya memisahkan kode ke beberapa file:
simple-api/
├── routes/
│ └── users.js
├── controllers/
│ └── userController.js
├── models/
│ └── user.js
├── middleware/
│ └── errorHandler.js
└── server.js
Ini membuat kode lebih maintainable dan mudah di-scale.
Langkah Selanjutnya
API sederhana ini sudah berfungsi, tapi untuk production Anda perlu:
- Database sesungguhnya - MongoDB, PostgreSQL, MySQL
- Authentication - JWT, OAuth, session-based
- Validation - library seperti Joi atau express-validator
- Logging - Winston atau Morgan
- Rate limiting - untuk prevent abuse
- Environment variables - untuk configuration
- Testing - Jest, Mocha, atau Supertest
Kesimpulan
Membuat REST API dengan Node.js dan Express sebenarnya tidak sulit. Konsep dasarnya straightforward:
- Routes untuk handle different HTTP methods
- Request/response cycle
- Data validation
- Error handling
Mulai dengan simple seperti contoh di atas, kemudian tambahkan fitur sesuai kebutuhan. Jangan langsung pakai framework kompleks sebelum paham dasarnya.
File lengkap server.js bisa di-download atau lihat dokumentasi Express untuk fitur lebih lanjut.
Selamat coding!