Latihan RESTful API dari Nol (Node.js + MySQL) β€” Versi Simple

Latihan RESTful API dari Nol (Node.js + MySQL) β€” Versi Simple

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.


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

READ :  NodeJS Performance Tuning untuk High Traffic: Menangani Ribuan Request per Detik

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 πŸš€