Hướng dẫn xây dựng REST API với Node.js và Express cho người mới bắt đầu
Mục lục bài viết
1. REST API là gì và kiến trúc cơ bản
REST (Representational State Transfer) là kiến trúc API phổ biến nhất hiện nay, dùng giao thức HTTP để giao tiếp giữa client và server. Mỗi tài nguyên (resource) trong REST được xác định bằng một URL duy nhất và thao tác qua các phương thức HTTP tiêu chuẩn.
Các phương thức HTTP: GET (lấy dữ liệu), POST (tạo mới), PUT/PATCH (cập nhật), DELETE (xóa).
Ví dụ: GET /api/users lấy danh sách người dùng. POST /api/users tạo người dùng mới. GET /api/users/1 lấy người dùng có ID = 1. Dữ liệu trả về thường ở định dạng JSON. Express.js là framework Node.js phổ biến nhất để xây dựng REST API nhờ cú pháp đơn giản và cộng đồng lớn.
2. Cài đặt môi trường và khởi tạo dự án
Bước 1: Cài Node.js (phiên bản LTS mới nhất) từ nodejs.org.
Bước 2: Tạo thư mục dự án và khởi tạo:
mkdir my-api && cd my-api
npm init -y
Bước 3: Cài Express và các dependencies:
npm install express
npm install -D nodemon
Bước 4: Tạo file index.js với nội dung:
const express = require('express')
const app = express()
app.use(express.json())
app.listen(3000, () => console.log('Server chạy port 3000'))
Bước 5: Thêm script vào package.json: dev = nodemon index.js
Chạy lệnh npm run dev server đã sẵn sàng!
3. Tạo routes và middleware xử lý CRUD
Tạo thư mục routes và file users.js:
const router = express.Router()
router.get('/', (req, res) => { res.json(users) })
router.post('/', (req, res) => { const user = req.body; users.push(user); res.status(201).json(user) })
router.put('/:id', (req, res) => { /* cập nhật user */ })
router.delete('/:id', (req, res) => { /* xóa user */ })
Middleware là hàm xử lý request trước khi đến route:
app.use(express.json())parse JSON body.app.use(cors())cho phép cross-origin requests.- Custom middleware cho authentication, logging, error handling.
4. Kết nối database với MongoDB và Mongoose
Cài Mongoose: npm install mongoose
Kết nối đến MongoDB:
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/myapi')
Định nghĩa Schema:
const userSchema = new mongoose.Schema({ name: String, email: String, age: Number })
const User = mongoose.model('User', userSchema)
CRUD với Mongoose:
User.find() lấy tất cả.
User.create({ name: 'An', email: 'an@email.com' }) tạo mới.
User.findByIdAndUpdate(id, update) cập nhật.
User.findByIdAndDelete(id) xóa.
app.use((err, req, res, next) => { res.status(500).json({ error: err.message }) })5. Validation, bảo mật và triển khai
Validation: Dùng express-validator hoặc Joi để kiểm tra dữ liệu đầu vào.
Ví dụ: kiểm tra email hợp lệ, password tối thiểu 6 ký tự.
Bảo mật:
- Dùng
helmetbảo vệ HTTP headers. - Dùng
bcrypthash password trước khi lưu. - Dùng
jsonwebtokenJWT authentication. - Giới hạn rate limiting với express-rate-limit.
Triển khai:
- Dùng
dotenvcho biến môi trường. - Deploy lên Render, Railway hoặc Vercel (serverless).
- Dùng PM2 cho production:
pm2 start index.js.
.env vào .gitignore.6. Testing API với Postman và viết unit test
Postman: Công cụ kiểm tra API phổ biến nhất. Tạo collection, thêm request GET/POST/PUT/DELETE, kiểm tra response status và body.
Unit Test với Jest và Supertest:
Cài đặt: npm install -D jest supertest
Viết test cho route GET /api/users:
const request = require('supertest')
const app = require('../index')
describe('GET /api/users', () => { it('should return users list', async () => { const res = await request(app).get('/api/users'); expect(res.statusCode).toBe(200); expect(res.body).toBeInstanceOf(Array) }) })
Chạy test: npm test
Luôn viết test cho các endpoint quan trọng trước khi deploy. Test tự động giúp phát hiện lỗi sớm khi thay đổi code.
🙋 Câu hỏi thường gặp
Express có còn là lựa chọn tốt năm 2026 không?
Có. Express vẫn là framework Node.js phổ biến nhất với hệ sinh thái middleware phong phú. Tuy nhiên, nếu bạn làm dự án mới, hãy cân nhắc Fastify (nhanh hơn 2x) hoặc Hono (nhẹ, modern). Express vẫn là lựa chọn tốt cho người mới vì tài liệu nhiều và dễ học.
Nên dùng MongoDB hay PostgreSQL cho REST API?
MongoDB phù hợp cho dữ liệu không có cấu trúc cố định, phát triển nhanh ở giai đoạn đầu. PostgreSQL phù hợp cho dữ liệu có quan hệ, cần integrity và transaction. Với người mới, MongoDB dễ bắt đầu hơn.
Làm sao để deploy API miễn phí?
Render (render.com) gói free với 512MB RAM, sleep sau 15 phút không hoạt động. Railway gói $5/tháng nhưng có credit free $5. Vercel serverless functions miễn phí cho API nhỏ (dưới 100 giờ chạy/tháng). Fly.io có free tier nhỏ.