Back to Blogtutorial
Cara Membuat REST API dengan Node.js dan Express
Metro New Technology
January 2, 2024
4 min read
nodejsexpressapibackend

Cara Membuat REST API dengan Node.js dan Express
REST API adalah jembatan antara frontend dan database. Di tutorial ini, kita akan membuat API lengkap untuk aplikasi Todo List.
Prerequisites
- Node.js terinstall
- Pemahaman dasar JavaScript
- Postman atau tool API testing
Setup Project
# Buat folder project
mkdir todo-api
cd todo-api
# Initialize npm
npm init -y
# Install dependencies
npm install express cors dotenv
# Install dev dependencies
npm install -D nodemon
Struktur Folder
todo-api/
├── src/
│ ├── routes/
│ │ └── todos.js
│ ├── controllers/
│ │ └── todoController.js
│ ├── middleware/
│ │ └── errorHandler.js
│ └── index.js
├── package.json
└── .env
Buat Server Basic
// src/index.js
const express = require('express');
const cors = require('cors');
require('dotenv').config();
const app = express();
const PORT = process.env.PORT || 3000;
// Middleware
app.use(cors());
app.use(express.json());
// Health check
app.get('/', (req, res) => {
res.json({ message: 'Todo API is running!' });
});
// Start server
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
// package.json - tambahkan scripts
{
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js"
}
}
Buat Routes dan Controller
Controller
// src/controllers/todoController.js
// Simulated database
let todos = [
{ id: 1, title: 'Belajar Node.js', completed: false },
{ id: 2, title: 'Buat REST API', completed: false },
];
// Get all todos
exports.getAllTodos = (req, res) => {
res.json({
success: true,
data: todos,
count: todos.length
});
};
// Get single todo
exports.getTodoById = (req, res) => {
const { id } = req.params;
const todo = todos.find(t => t.id === parseInt(id));
if (!todo) {
return res.status(404).json({
success: false,
message: 'Todo not found'
});
}
res.json({ success: true, data: todo });
};
// Create todo
exports.createTodo = (req, res) => {
const { title } = req.body;
if (!title) {
return res.status(400).json({
success: false,
message: 'Title is required'
});
}
const newTodo = {
id: todos.length + 1,
title,
completed: false
};
todos.push(newTodo);
res.status(201).json({
success: true,
data: newTodo
});
};
// Update todo
exports.updateTodo = (req, res) => {
const { id } = req.params;
const { title, completed } = req.body;
const todoIndex = todos.findIndex(t => t.id === parseInt(id));
if (todoIndex === -1) {
return res.status(404).json({
success: false,
message: 'Todo not found'
});
}
todos[todoIndex] = {
...todos[todoIndex],
title: title || todos[todoIndex].title,
completed: completed !== undefined ? completed : todos[todoIndex].completed
};
res.json({
success: true,
data: todos[todoIndex]
});
};
// Delete todo
exports.deleteTodo = (req, res) => {
const { id } = req.params;
const todoIndex = todos.findIndex(t => t.id === parseInt(id));
if (todoIndex === -1) {
return res.status(404).json({
success: false,
message: 'Todo not found'
});
}
todos.splice(todoIndex, 1);
res.json({
success: true,
message: 'Todo deleted successfully'
});
};
Routes
// src/routes/todos.js
const express = require('express');
const router = express.Router();
const todoController = require('../controllers/todoController');
router.get('/', todoController.getAllTodos);
router.get('/:id', todoController.getTodoById);
router.post('/', todoController.createTodo);
router.put('/:id', todoController.updateTodo);
router.delete('/:id', todoController.deleteTodo);
module.exports = router;
Update index.js
// src/index.js - tambahkan routes
const todoRoutes = require('./routes/todos');
// ... middleware setup
// Routes
app.use('/api/todos', todoRoutes);
// ... start server
Error Handling Middleware
// src/middleware/errorHandler.js
const errorHandler = (err, req, res, next) => {
console.error(err.stack);
res.status(err.status || 500).json({
success: false,
message: err.message || 'Internal Server Error'
});
};
module.exports = errorHandler;
Testing dengan Postman
GET All Todos
GET http://localhost:3000/api/todos
GET Single Todo
GET http://localhost:3000/api/todos/1
POST Create Todo
POST http://localhost:3000/api/todos
Content-Type: application/json
{
"title": "Belajar REST API"
}
PUT Update Todo
PUT http://localhost:3000/api/todos/1
Content-Type: application/json
{
"completed": true
}
DELETE Todo
DELETE http://localhost:3000/api/todos/1
Best Practices
-
Selalu gunakan status code yang tepat
- 200: Success
- 201: Created
- 400: Bad Request
- 404: Not Found
- 500: Internal Server Error
-
Struktur response konsisten
{ "success": true/false, "data": {}, "message": "Optional message" } -
Validasi input
-
Gunakan environment variables
-
Implement logging
Kesimpulan
Anda sudah belajar cara membuat REST API sederhana dengan Node.js dan Express. API ini bisa dikembangkan dengan menambahkan:
- Database (MongoDB/PostgreSQL)
- Authentication (JWT)
- Validation (Joi/Zod)
- Rate limiting
- API documentation (Swagger)
Happy coding! 🚀
Share this article