Buat kamu yang udah paham konsep REST API dan pengen langsung praktek, kali ini kita bakal bikin REST API sederhana pake Node.js dan Express. Kita bakal bikin API untuk manajemen data buku yang bisa melakukan operasi CRUD (Create, Read, Update, Delete).
Yang Harus Disiapkan
- Node.js terinstall di komputer kamu
- Code editor (VS Code recommended)
- Postman untuk testing API
- Basic knowledge JavaScript
1. Setup Project
Pertama, kita bikin project baru dan install dependencies yang dibutuhkan:
# Bikin folder project
mkdir simple-rest-api
cd simple-rest-api
# Inisialisasi project Node.js
npm init -y
# Install dependencies
npm install express body-parser
2. Bikin File Server
Buat file server.js
di root folder project:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
// Middleware
app.use(bodyParser.json());
// Data dummy untuk simulasi database
let books = [
{ id: 1, title: 'Harry Potter', author: 'J.K. Rowling' },
{ id: 2, title: 'Lord of the Rings', author: 'J.R.R. Tolkien' }
];
// Start server
app.listen(port, () => {
console.log(`Server berjalan di http://localhost:${port}`);
});
3. Implementasi CRUD Endpoints
GET - Ambil Semua Buku
// GET /books - Ambil semua buku
app.get('/books', (req, res) => {
res.json(books);
});
GET - Ambil Buku by ID
// GET /books/:id - Ambil buku berdasarkan ID
app.get('/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) {
return res.status(404).json({ message: 'Buku tidak ditemukan' });
}
res.json(book);
});
POST - Tambah Buku Baru
// POST /books - Tambah buku baru
app.post('/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});
PUT - Update Buku
// PUT /books/:id - Update buku
app.put('/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) {
return res.status(404).json({ message: 'Buku tidak ditemukan' });
}
book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});
DELETE - Hapus Buku
// DELETE /books/:id - Hapus buku
app.delete('/books/:id', (req, res) => {
const bookIndex = books.findIndex(b => b.id === parseInt(req.params.id));
if (bookIndex === -1) {
return res.status(404).json({ message: 'Buku tidak ditemukan' });
}
books.splice(bookIndex, 1);
res.status(204).send();
});
4. Testing API dengan Postman
GET All Books
GET http://localhost:3000/books
POST New Book
POST http://localhost:3000/books
Body:
{ "title": "The Hobbit", "author": "J.R.R. Tolkien" }
5. Error Handling
Untuk membuat API lebih robust, kita perlu tambahkan validasi dan error handling:
// Middleware untuk validasi body request
const validateBook = (req, res, next) => {
if (!req.body.title || !req.body.author) {
return res.status(400).json({
message: 'Title dan author harus diisi'
});
}
next();
};
// Gunakan middleware di route yang butuh validasi
app.post('/books', validateBook, (req, res) => {
// ... kode POST yang sudah ada
});
app.put('/books/:id', validateBook, (req, res) => {
// ... kode PUT yang sudah ada
});
Tips Testing
- Test semua endpoint dengan berbagai skenario
- Coba case error dengan input yang invalid
- Perhatikan status code yang dikembalikan
- Gunakan Postman Collections untuk menyimpan request
6. Pengembangan Lebih Lanjut
Integrasi Database
Ganti array dengan database seperti MongoDB atau MySQL
Authentication
Tambahkan JWT untuk secure endpoints
Middleware
Tambahkan logging, rate limiting, dll
Documentation
Gunakan Swagger/OpenAPI untuk dokumentasi
File Structure
simple-rest-api/
├── node_modules/
├── package.json
├── package-lock.json
└── server.js
Kesimpulan
Sekarang kamu udah punya REST API sederhana yang bisa jadi starting point buat project yang lebih besar. Coba eksplor dan tambahkan fitur-fitur lain sesuai kebutuhan project kamu!
Troubleshooting
Cannot find module 'express'
Jalankan npm install
untuk install ulang dependencies
Port already in use
Ganti port di konfigurasi atau matikan aplikasi yang menggunakan port tersebut
Challenge!
Coba tambahkan fitur-fitur berikut ke API kamu:
- Search buku berdasarkan title atau author
- Filter buku berdasarkan tahun terbit
- Pagination untuk list buku
- Upload cover buku