Node.js - RESTful API
Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của Node.js và RESTful APIs. Đừng lo lắng nếu những thuật ngữ này听起来 giống như ngôn ngữ ngoài hành tinh - đến cuối bài hướng dẫn này, bạn sẽ có thể nói thành thạo "REST"! ?
REST architecture là gì?
REST, hoặc Representational State Transfer, giống như một bộ quy tắc về cách máy tính nên giao tiếp với nhau qua internet. Hãy tưởng tượng bạn đang ở một nhà hàng. Bạn (client) yêu cầu người phục vụ (API) đưa ra thực đơn (dữ liệu). Người phục vụ không tự nấu thức ăn mà đi đến bếp (server) để lấy những gì bạn cần. Quy trình này tương tự như cách REST hoạt động!
Nguyên tắc chính của REST:
- Client-Server: Phân cách giữa giao diện người dùng và lưu trữ dữ liệu.
- Stateless: Mỗi yêu cầu từ client đến server phải chứa tất cả thông tin cần thiết để hiểu yêu cầu.
- Cacheable: Phản hồi phải xác định mình là có thể lưu trong cache hay không.
- Uniform Interface: Một cách tiêu chuẩn để tương tác với server.
- Layered System: Client không thể biết được mình đang kết nối trực tiếp với server hay một trung gian.
HTTP methods
Bây giờ, hãy nói về các phương thức HTTP. Đây giống như các động từ cho biết server cần thực hiện hành động nào. Dưới đây là những phương thức chính:
Phương thức | Mô tả | Ví dụ sử dụng |
---|---|---|
GET | Lấy dữ liệu | Lấy hồ sơ người dùng |
POST | Tạo dữ liệu mới | Thêm một bài viết blog mới |
PUT | Cập nhật dữ liệu hiện có | Chỉnh sửa chi tiết người dùng |
DELETE | Xóa dữ liệu | Xóa một tweet |
PATCH | Chỉnh sửa một phần dữ liệu | Cập nhật chỉ email của người dùng |
Hãy xem các phương thức này trong hành động với một số ví dụ mã Node.js đơn giản!
Ví dụ yêu cầu GET:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});
server.listen(3000, () => {
console.log('Server đang chạy trên cổng 3000');
});
Trong ví dụ này, chúng ta đang tạo một server đơn giản trả về một danh sách JSON của người dùng khi nhận được yêu cầu GET đến '/api/users'. Khi bạn chạy đoạn mã này và truy cập 'http://localhost:3000/api/users' trong trình duyệt, bạn sẽ thấy danh sách người dùng!
Ví dụ yêu cầu POST:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('Người dùng mới được thêm:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Người dùng đã được tạo thành công' }));
});
}
});
server.listen(3000, () => {
console.log('Server đang chạy trên cổng 3000');
});
Ví dụ này cho thấy cách xử lý yêu cầu POST để thêm một người dùng mới. Nó lắng nghe dữ liệu vào, xử lý nó và gửi phản hồi xác nhận người dùng đã được tạo.
RESTful Web Services
Bây giờ chúng ta đã hiểu được cơ bản, hãy cùng vào sâu hơn để tạo một API RESTful đầy đủ sử dụng Express, một khung công tác phổ biến của Node.js giúp việc xây dựng các ứng dụng web và API trở nên dễ dàng!
Trước tiên, hãy cài đặt Express:
npm init -y
npm install express
Bây giờ, hãy tạo một API RESTful đơn giản cho thư viện sách:
const express = require('express');
const app = express();
app.use(express.json());
let books = [
{ id: 1, title: 'The Great Gatsby', author: 'F. Scott Fitzgerald' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' }
];
// GET tất cả sách
app.get('/api/books', (req, res) => {
res.json(books);
});
// GET một sách cụ thể
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Sách không tìm thấy');
res.json(book);
});
// POST một sách mới
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});
// PUT (cập nhật) một sách
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Sách không tìm thấy');
book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});
// DELETE một sách
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Sách không tìm thấy');
const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});
app.listen(3000, () => console.log('Server đang chạy trên cổng 3000'));
Ví dụ này tạo một API RESTful đầy đủ để quản lý thư viện sách. Hãy phân tích nó:
- Chúng ta sử dụng
app.get()
để xử lý yêu cầu GET, cả cho tất cả sách và cho một sách cụ thể theo ID. -
app.post()
xử lý việc tạo sách mới. -
app.put()
cho phép chúng ta cập nhật sách hiện có. -
app.delete()
cho phép chúng ta xóa sách khỏi thư viện.
Mỗi route tuân theo nguyên tắc RESTful, sử dụng các phương thức HTTP và mã trạng thái phù hợp.
Kiểm tra API của bạn
Để kiểm tra API của bạn, bạn có thể sử dụng các công cụ như Postman hoặc curl. Dưới đây là một ví dụ sử dụng curl:
# GET tất cả sách
curl http://localhost:3000/api/books
# POST một sách mới
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"George Orwell"}' http://localhost:3000/api/books
# PUT (cập nhật) một sách
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Updated Title","author":"Updated Author"}' http://localhost:3000/api/books/1
# DELETE một sách
curl -X DELETE http://localhost:3000/api/books/1
Và thế là xong! Bạn đã tạo thành công API RESTful đầu tiên của mình sử dụng Node.js và Express. Hãy nhớ, thực hành là cách tốt nhất để trở nên hoàn hảo. Thử thêm nhiều tính năng hơn vào API thư viện sách của bạn, như tìm kiếm sách hoặc sắp xếp chúng theo các tiêu chí khác nhau.
Xây dựng API giống như xây dựng một cây cầu giữa các ứng dụng phần mềm khác nhau. Với mỗi API bạn tạo ra, bạn đang mở ra những khả năng mới cho cách các chương trình có thể tương tác và chia sẻ dữ liệu. Hãy tiếp tục khám phá, tiếp tục viết mã và quan trọng nhất, hãy vui vẻ trong hành trình trở thành chuyên gia Node.js của bạn!
Credits: Image by storyset