Chào mọi người! Nếu bạn là một nhà phát triển web và muốn xây dựng backend cho ứng dụng của mình, việc tạo API (Application Programming Interface) là một kỹ năng vô cùng quan trọng. Node.js, với khả năng chạy JavaScript ở phía máy chủ, là một lựa chọn tuyệt vời để xây dựng các API mạnh mẽ và hiệu suất cao. Trong bài viết này, chúng ta sẽ cùng nhau đi từng bước để xây dựng một RESTful API đơn giản với Node.js và framework Express, một trong những framework Node.js phổ biến nhất hiện nay.
RESTful API là gì? Tại sao lại chọn Node.js và Express?

Trước khi bắt đầu, hãy cùng nhau hiểu rõ hơn về RESTful API và lý do tại sao Node.js và Express lại là những lựa chọn tốt để xây dựng chúng.
RESTful API (Representational State Transfer Application Programming Interface) là một kiểu kiến trúc phổ biến cho việc xây dựng các dịch vụ web. Nó dựa trên các nguyên tắc như sử dụng các phương thức HTTP chuẩn (GET, POST, PUT, DELETE), stateless server và định dạng dữ liệu phổ biến (thường là JSON).
Tại sao chọn Node.js và Express?
- JavaScript quen thuộc: Nếu bạn đã có kinh nghiệm với JavaScript ở front-end, việc sử dụng Node.js ở backend sẽ giúp bạn tận dụng lại kiến thức này.
- Hiệu suất cao: Node.js sử dụng kiến trúc non-blocking, event-driven, rất phù hợp cho các ứng dụng có nhiều I/O như API.
- Hệ sinh thái phong phú: npm (Node Package Manager) cung cấp một lượng lớn các thư viện và framework hỗ trợ cho việc phát triển.
- Express.js đơn giản và mạnh mẽ: Express là một framework web minimalist và linh hoạt cho Node.js, giúp việc xây dựng API trở nên dễ dàng và nhanh chóng.
Các bước xây dựng API với Node.js và Express

Bây giờ, chúng ta sẽ đi vào các bước cụ thể để xây dựng một RESTful API đơn giản. Chúng ta sẽ tạo một API quản lý danh sách các đầu sách (books).
1. Cài đặt Node.js và npm
Trước tiên, hãy đảm bảo bạn đã cài đặt Node.js và npm trên máy tính của mình. Bạn có thể tải xuống trình cài đặt từ trang web chính thức của Node.js (https://nodejs.org/). npm thường được cài đặt cùng với Node.js. Để kiểm tra, hãy mở terminal hoặc command prompt và chạy các lệnh sau:
Bash
node -v
npm -v
Nếu bạn thấy thông tin về phiên bản được hiển thị, nghĩa là bạn đã cài đặt thành công.
2. Khởi tạo dự án Node.js
Tạo một thư mục mới cho dự án của bạn và di chuyển vào thư mục đó bằng terminal:
Bash
mkdir book-api
cd book-api
Sau đó, khởi tạo một dự án Node.js mới bằng lệnh:
Bash
npm init -y
Lệnh này sẽ tạo một file package.json
cơ bản trong thư mục dự án của bạn.
3. Cài đặt Express
Tiếp theo, chúng ta sẽ cài đặt framework Express bằng npm:
Bash
npm install express --save
Lệnh này sẽ tải xuống và cài đặt Express, đồng thời thêm nó vào danh sách dependencies trong file package.json
.
4. Tạo file ứng dụng (app.js)
Tạo một file mới tên là app.js
trong thư mục dự án của bạn. Đây sẽ là nơi chúng ta viết code cho API.
5. Thiết lập một server Express cơ bản
Mở file app.js
và thêm đoạn code sau để thiết lập một server Express cơ bản:
JavaScript
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json()); // Middleware để xử lý dữ liệu JSON trong request body
app.get('/', (req, res) => {
res.send('Chào mừng đến với Book API!');
});
app.listen(port, () => {
console.log(`Máy chủ đang chạy tại http://localhost:${port}`);
});
Đoạn code nàyImport thư viện Express, tạo một ứng dụng Express, định nghĩa một route GET đơn giản tại đường dẫn /
, và khởi động server lắng nghe trên cổng 3000. app.use(express.json())
là middleware để Express có thể xử lý dữ liệu JSON trong phần body của các request.
6. Định nghĩa các route API cho tài nguyên “Book”
Bây giờ, chúng ta sẽ định nghĩa các route cho API quản lý sách. Chúng ta sẽ hỗ trợ các thao tác CRUD (Create, Read, Update, Delete).
a. Lưu trữ dữ liệu (tạm thời trong bộ nhớ)
Trong ví dụ này, chúng ta sẽ lưu trữ dữ liệu sách tạm thời trong một mảng JavaScript. Trong các ứng dụng thực tế, bạn sẽ thường sử dụng một cơ sở dữ liệu thực sự (ví dụ: MongoDB, PostgreSQL, MySQL).
JavaScript
let books = [
{ id: 1, title: 'Harry Potter và Hòn đá Phù thủy', author: 'J.K. Rowling' },
{ id: 2, title: 'Chúa tể của những chiếc nhẫn', author: 'J.R.R. Tolkien' },
];
let nextId = 3;
b. Route GET để lấy danh sách tất cả sách
JavaScript
app.get('/books', (req, res) => {
res.json(books);
});
c. Route GET để lấy thông tin một cuốn sách theo ID
JavaScript
app.get('/books/:id', (req, res) => {
const bookId = parseInt(req.params.id);
const book = books.find(b => b.id === bookId);
if (book) {
res.json(book);
} else {
res.status(404).send('Không tìm thấy sách');
}
});
d. Route POST để thêm một cuốn sách mới
JavaScript
app.post('/books', (req, res) => {
const { title, author } = req.body;
if (title && author) {
const newBook = { id: nextId++, title, author };
books.push(newBook);
res.status(201).json(newBook);
} else {
res.status(400).send('Vui lòng cung cấp tiêu đề và tác giả');
}
});
e. Route PUT để cập nhật thông tin một cuốn sách theo ID
JavaScript
app.put('/books/:id', (req, res) => {
const bookId = parseInt(req.params.id);
const { title, author } = req.body;
const bookIndex = books.findIndex(b => b.id === bookId);
if (bookIndex !== -1) {
books[bookIndex] = { id: bookId, title: title || books[bookIndex].title, author: author || books[bookIndex].author };
res.json(books[bookIndex]);
} else {
res.status(404).send('Không tìm thấy sách');
}
});
f. Route DELETE để xóa một cuốn sách theo ID
JavaScript
app.delete('/books/:id', (req, res) => {
const bookId = parseInt(req.params.id);
const initialLength = books.length;
books = books.filter(b => b.id !== bookId);
if (books.length < initialLength) {
res.status(204).send(); // No Content
} else {
res.status(404).send('Không tìm thấy sách');
}
});
7. Chạy API của bạn
Lưu file app.js
và chạy server bằng lệnh sau trong terminal:
Bash
node app.js
Bạn sẽ thấy thông điệp: Máy chủ đang chạy tại http://localhost:3000
.
8. Kiểm thử API
Bây giờ bạn có thể kiểm thử API của mình bằng các công cụ như Postman, Insomnia hoặc curl
.
- Lấy danh sách tất cả sách (GET): Truy cập
http://localhost:3000/books
- Lấy thông tin một cuốn sách (GET): Truy cập
http://localhost:3000/books/1
- Thêm một cuốn sách mới (POST): Gửi một request POST đến
http://localhost:3000/books
với body là JSON:{ "title": "Tên sách mới", "author": "Tác giả mới" }
- Cập nhật thông tin sách (PUT): Gửi một request PUT đến
http://localhost:3000/books/1
với body là JSON:{ "title": "Tiêu đề đã cập nhật" }
- Xóa một cuốn sách (DELETE): Gửi một request DELETE đến
http://localhost:3000/books/2
Lời kết và các bước tiếp theo

Chúc mừng! Bạn đã xây dựng thành công một RESTful API cơ bản với Node.js và Express. Đây chỉ là những bước khởi đầu. Để xây dựng các API phức tạp và mạnh mẽ hơn, bạn có thể tìm hiểu thêm về:
- Sử dụng cơ sở dữ liệu thực tế: Thay vì lưu trữ dữ liệu trong bộ nhớ, hãy kết nối API của bạn với một cơ sở dữ liệu như MongoDB hoặc PostgreSQL.
- Xác thực và phân quyền: Bảo vệ API của bạn bằng cách thêm các cơ chế xác thực và phân quyền để chỉ những người dùng được phép mới có thể truy cập.
- Validation dữ liệu: Đảm bảo dữ liệu nhận được từ client hợp lệ trước khi xử lý.
- Error handling: Xử lý các lỗi một cách chuyên nghiệp và trả về các response phù hợp cho client.
- Document hóa API: Sử dụng các công cụ như Swagger để tạo tài liệu API rõ ràng và dễ sử dụng.
Hy vọng hướng dẫn này sẽ giúp bạn có một khởi đầu tốt trong việc xây dựng API với Node.js. Chúc bạn thành công trên con đường phát triển web của mình!