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 users
  • http://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:

  1. Postman - GUI tool yang mudah digunakan
  2. cURL - command line tool
  3. Thunder Client - VS Code extension
  4. 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:

  1. Database sesungguhnya - MongoDB, PostgreSQL, MySQL
  2. Authentication - JWT, OAuth, session-based
  3. Validation - library seperti Joi atau express-validator
  4. Logging - Winston atau Morgan
  5. Rate limiting - untuk prevent abuse
  6. Environment variables - untuk configuration
  7. 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!