Lập Trình RESTful API Với MySQL Và Node.js – Hướng Dẫn Chi Tiết

09/03/2026 P T P Chung 7 phút đọc 0 bình luận

Giới thiệu

Trong thế giới phát triển phần mềm hiện đại, RESTful API đã trở thành tiêu chuẩn để xây dựng các giao diện kết nối giữa client và server. Kết hợp với MySQL - một trong những hệ quản trị cơ sở dữ liệu quan hệ phổ biến nhất, và Node.js - runtime JavaScript bên server, chúng ta có một bộ công cụ mạnh mẽ để phát triển các ứng dụng web hiệu quả. Bài viết này sẽ hướng dẫn chi tiết cách lập trình RESTful API sử dụng MySQL và Node.js, từ thiết lập môi trường đến triển khai các phương thức cơ bản.

Chuẩn bị môi trường

Để bắt đầu, bạn cần cài đặt Node.js trên máy. Sau đó, tạo một thư mục cho dự án và khởi tạo project với npm:

mkdir restful-api-mysql
cd restful-api-mysql
npm init -y

Tiếp theo, cài đặt các package cần thiết:

npm install express mysql2 dotenv

Trong đó: - express: framework web cho Node.js. - mysql2: driver kết nối MySQL. - dotenv: quản lý biến môi trường.

Thiết lập kết nối MySQL

Tạo file .env để lưu trữ thông tin kết nối database:

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=yourpassword
DB_NAME=mydatabase

Tạo file config/database.js:

const mysql = require('mysql2');
require('dotenv').config();

const pool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, waitForConnections: true, connectionLimit: 10, queueLimit: 0 });

module.exports = pool.promise();

Xây dựng model và controller

Giả sử chúng ta xây dựng API cho một bảng users với các trường: id, name, email, created_at.

Tạo file models/User.js:

const db = require('../config/database');

class User { static async findAll() { const [rows] = await db.query('SELECT * FROM users'); return rows; }

static async findById(id) { const [rows] = await db.query('SELECT * FROM users WHERE id = ?', [id]); return rows[0]; }

static async create(userData) { const [result] = await db.query( 'INSERT INTO users (name, email) VALUES (?, ?)', [userData.name, userData.email] ); return result.insertId; }

static async update(id, userData) { await db.query( 'UPDATE users SET name = ?, email = ? WHERE id = ?', [userData.name, userData.email, id] ); }

static async delete(id) { await db.query('DELETE FROM users WHERE id = ?', [id]); } }

module.exports = User;

Tạo file controllers/UserController.js:

const User = require('../models/User');

exports.getAllUsers = async (req, res) => { try { const users = await User.findAll(); res.json(users); } catch (err) { res.status(500).json({ error: err.message }); } };

Quảng cáo

300x250 In-Content Advertisement

exports.getUserById = async (req, res) => { try { const user = await User.findById(req.params.id); if (!user) return res.status(404).json({ error: 'User not found' }); res.json(user); } catch (err) { res.status(500).json({ error: err.message }); } };

exports.createUser = async (req, res) => { try { const userId = await User.create(req.body); res.status(201).json({ id: userId, message: 'User created successfully' }); } catch (err) { res.status(500).json({ error: err.message }); } };

exports.updateUser = async (req, res) => { try { await User.update(req.params.id, req.body); res.json({ message: 'User updated successfully' }); } catch (err) { res.status(500).json({ error: err.message }); } };

exports.deleteUser = async (req, res) => { try { await User.delete(req.params.id); res.json({ message: 'User deleted successfully' }); } catch (err) { res.status(500).json({ error: err.message }); } };

Tạo router và ứng dụng chính

Tạo file routes/users.js:

const express = require('express');
const router = express.Router();
const userController = require('../controllers/UserController');

router.get('/', userController.getAllUsers); router.get('/:id', userController.getUserById); router.post('/', userController.createUser); router.put('/:id', userController.updateUser); router.delete('/:id', userController.deleteUser);

module.exports = router;

Tạo file app.js:

const express = require('express');
const userRoutes = require('./routes/users');

const app = express(); app.use(express.json()); app.use('/api/users', userRoutes);

const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(Server is running on port ${PORT}); });

Kiểm thử API

Sử dụng Postman hoặc curl để kiểm thử:

# Lấy tất cả users
curl http://localhost:3000/api/users

# Tạo user mới curl -X POST http://localhost:3000/api/users -H "Content-Type: application/json" -d '{"name":"John Doe","email":"[email protected]"}'

# Lấy user theo ID curl http://localhost:3000/api/users/1

# Cập nhật user curl -X PUT http://localhost:3000/api/users/1 -H "Content-Type: application/json" -d '{"name":"Jane Doe","email":"[email protected]"}'

# Xóa user curl -X DELETE http://localhost:3000/api/users/1

Kết luận

Qua bài viết này, chúng ta đã xây dựng một RESTful API hoàn chỉnh với MySQLNode.js, bao gồm kết nối database, model, controller, router và ứng dụng chính. Điều quan trọng là tổ chức code một cách rõ ràng, tách biệt các layer và xử lý lỗi một cách hiệu quả. Bạn có thể mở rộng dự án bằng cách thêm xác thực, validation, pagination, hoặc kết nối với các database khác. Chúc bạn thành công với dự án của mình!

Quảng cáo

728x90 Bottom Advertisement

Thay thế bằng mã Google AdSense

Chia sẻ bài viết

Facebook Twitter

Bình luận

Chia sẻ ý kiến của bạn về bài viết này

Viết bình luận

Bình luận của bạn sẽ được kiểm duyệt trước khi hiển thị

Chưa có bình luận nào

Hãy là người đầu tiên bình luận về bài viết này!