Kalau kamu masih pemula, terlalu banyak tools justru bikin bingung. Jadi di sini kita akan bikin API sesederhana mungkin, hanya pakai:
- Express.js
- MySQL (mysql2)
Tanpa:
- body-parser β (sudah built-in di Express)
- dotenv β (langsung hardcode dulu biar fokus belajar)
Tujuannya: kamu benar-benar paham alur dasar API.
Contents
Apa yang Akan Kita Buat?
API sederhana untuk CRUD user:
- GET semua user
- GET user by ID
- POST (tambah user)
- PUT (update user)
- DELETE user
1. Setup Project
Buat folder:
mkdir api-simple
cd api-simple
Inisialisasi:
npm init -y
Install dependency:
npm install express mysql2
2. Buat Database MySQL
Masuk ke MySQL, lalu jalankan:
CREATE DATABASE api_simple;
USE api_simple;CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
3. Buat File Utama (app.js)
Buat file app.js:
const express = require('express');
const mysql = require('mysql2/promise');
const app = express();
const PORT = 3000;//
app.use(express.json());
// Koneksi database
const db = mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: 'api_simple',
waitForConnections: true,
// β
sweet spot untuk API
connectionLimit: 30,
queueLimit: 0,
// β
stabil untuk long running
enableKeepAlive: true,
keepAliveInitialDelay: 0
});
db.connect((err) => {
if (err) {
console.log('Koneksi gagal:', err);
return;
}
console.log('MySQL Connected');
});// =======================
// ROUTES
// =======================// GET semua user
app.get('/users', (req, res) => {
db.query('SELECT * FROM users', (err, result) => {
if (err) return res.status(500).json(err);
res.json(result);
});
});// GET user by ID
app.get('/users/:id', (req, res) => {
const id = req.params.id; db.query('SELECT * FROM users WHERE id = ?', [id], (err, result) => {
if (err) return res.status(500).json(err);
res.json(result[0]);
});
});// POST user
app.post('/users', (req, res) => {
const { name, email } = req.body; db.query(
'INSERT INTO users (name, email) VALUES (?, ?)',
[name, email],
(err, result) => {
if (err) return res.status(500).json(err);
res.json({ message: 'User berhasil ditambahkan' });
}
);
});// PUT user
app.put('/users/:id', (req, res) => {
const id = req.params.id;
const { name, email } = req.body; db.query(
'UPDATE users SET name = ?, email = ? WHERE id = ?',
[name, email, id],
(err, result) => {
if (err) return res.status(500).json(err);
res.json({ message: 'User berhasil diupdate' });
}
);
});// DELETE user
app.delete('/users/:id', (req, res) => {
const id = req.params.id; db.query('DELETE FROM users WHERE id = ?', [id], (err, result) => {
if (err) return res.status(500).json(err);
res.json({ message: 'User berhasil dihapus' });
});
});// =======================
// JALANKAN SERVER
// =======================app.listen(PORT, () => {
console.log(`Server running di http://localhost:${PORT}`);
});
4. Jalankan Server
node app.js
Output:
MySQL Connected
Server running di http://localhost:3000
5. Testing API
Gunakan Postman / Thunder Client
GET Semua User
GET http://localhost:3000/users
POST User
POST http://localhost:3000/users
Body JSON:
{
"name": "Andi",
"email": "andi@email.com"
}
GET User by ID
GET http://localhost:3000/users/1
UPDATE User
PUT http://localhost:3000/users/1
{
"name": "Andi Update",
"email": "andi_new@email.com"
}
DELETE User
DELETE http://localhost:3000/users/1
Kenapa Versi Ini Penting?
Versi simple ini membantu kamu memahami:
- Alur request β response
- Cara Express handle routing
- Cara connect ke MySQL
- Cara query database
- Struktur dasar API
Tanpa distraksi tools tambahan.
Kapan Harus Pakai body-parser & dotenv?
Setelah kamu paham dasar:
Gunakan dotenv kalau:
- Sudah masuk production
- Butuh keamanan (password DB, API key)
Gunakan tools tambahan kalau:
- Project makin besar
- Butuh struktur rapi
- Tim kerja banyak
Upgrade Setelah Paham Ini
Kalau sudah nyaman, lanjutkan:
- Pisahkan file (routes, controller)
- Gunakan async/await
- Tambahkan validation
- Tambahkan authentication (JWT)
- Deploy ke server
Kesalahan yang Harus Dihindari
- Copy paste tanpa paham
- Tidak coba error sendiri
- Tidak testing endpoint
- Tidak eksplor query SQL
Penutup
Dengan versi sederhana ini, kamu sudah melakukan hal yang sangat penting:
Membuat API dari nol tanpa bantuan βmagic toolsβ
Ini yang membedakan programmer biasa dengan yang benar-benar paham.
Kalau kamu bisa:
- Mengerti alur ini
- Menjelaskan ulang tanpa lihat kode
- Memodifikasi sesuai kebutuhan
Berarti kamu sudah naik satu level sebagai backend developer π