JSON, API, database và CRUD
Bài này dành cho người chuẩn bị làm ứng dụng có dữ liệu như đơn hàng, thành viên hoặc bài viết. Học xong bạn sẽ hiểu một bản ghi đi từ form tới database và quay lại màn hình ra sao, và tự tay gọi thử một API thật bằng một lệnh terminal duy nhất. Ba câu hỏi "JSON là gì", "API là gì" và "CRUD là gì" - hay bị hỏi riêng lẻ trên mạng - được gộp vào đúng một bài vì chúng luôn đi cùng nhau trong thực tế.
JSON là gói dữ liệu
JSON (JavaScript Object Notation) là văn bản có cấu trúc để các phần của hệ thống trao đổi với nhau - frontend gửi JSON lên, backend trả JSON về:
{
"id": 12,
"customer": "Lan",
"status": "new",
"total": 350000
}Đọc nhanh: cặp "tên trường": giá trị, cách nhau bằng dấu phẩy, bọc trong { }. Giá trị có thể là chữ (trong ngoặc kép), số (không ngoặc kép), true/false, hoặc một JSON khác lồng bên trong. Tên trường phải rõ nghĩa, kiểu dữ liệu nhất quán (đã là số thì luôn là số, đừng lúc "350000" lúc 350000), và không bao giờ đưa secret (mật khẩu, API key) vào JSON gửi ra trình duyệt - trình duyệt là nơi ai cũng xem được qua DevTools ở bài trước.
API là cửa giao tiếp
Frontend gọi API bằng request; backend kiểm tra quyền và dữ liệu rồi trả response. Một quy ước thường gặp, gọi là REST:
| Hành động | HTTP method | Ví dụ URL | Trả về khi thành công |
|---|---|---|---|
| Đọc danh sách | GET | /api/orders | 200 OK + mảng JSON |
| Đọc một bản ghi | GET | /api/orders/12 | 200 OK + một object JSON |
| Tạo mới | POST | /api/orders | 201 Created + bản ghi vừa tạo |
| Sửa | PATCH/PUT | /api/orders/12 | 200 OK + bản ghi đã sửa |
| Xóa | DELETE | /api/orders/12 | 200 OK hoặc 204 No Content |
CRUD là viết tắt của Create, Read, Update, Delete - bốn thao tác này gần như phủ hết mọi tính năng quản lý dữ liệu bạn sẽ yêu cầu AI build. API tốt trả mã lỗi dễ hiểu (400 nếu dữ liệu gửi lên sai định dạng, 401/403 nếu chưa đăng nhập hoặc không đủ quyền, 404 nếu không tìm thấy bản ghi), không tin dữ liệu từ trình duyệt gửi lên mà chưa kiểm tra lại, và không cho người dùng sửa/xóa bản ghi của người khác chỉ bằng cách đổi số 12 thành 13 trên URL.
Tự tay gọi một API thật
jsonplaceholder.typicode.com là một API giả lập miễn phí, công khai, dựng riêng để luyện tập - gọi thoải mái, không cần đăng nhập, không ảnh hưởng dữ liệu thật của ai. Mở terminal và thử:
Nhắc lại từ bài trước: đang dùng PowerShell trên Windows thì gõ
curl.exethay vìcurltrong hai lệnh dưới đây.
curl https://jsonplaceholder.typicode.com/posts/1- Gửi một request
GET(mặc định củacurlkhi không ghi gì thêm) tới bản ghi cóid = 1. Bạn sẽ nhận về một object JSON có các trườnguserId,id,title,body.
curl -X POST https://jsonplaceholder.typicode.com/posts -H "Content-Type: application/json" -d '{"title": "Don hang test", "body": "Mo ta", "userId": 1}'-X POST: đổi method từ GET (mặc định) sang POST - nghĩa là "tạo mới", không phải "đọc".-H "Content-Type: application/json": báo cho server biết dữ liệu mình gửi lên có định dạng JSON.-d '...': nội dung JSON gửi lên, đúng cú pháp như ví dụ JSON ở đầu bài. Dùng dấu nháy đơn bọc ngoài (không phải nháy kép) - cách này chạy đúng trên cả bash lẫn PowerShell mà không cần thêm dấu\nào.- API này không lưu thật, chỉ giả vờ tạo và trả JSON kèm
idmới - đủ để bạn thấy hình dạng một requestPOSTthật trông thế nào.
Database giữ dữ liệu lâu dài
Biến trong bộ nhớ của server sẽ mất khi server khởi động lại; database giữ dữ liệu trên đĩa hoặc dịch vụ quản lý, tồn tại qua mọi lần restart. SQLite (một file duy nhất trên đĩa) hợp để học và app nhỏ; khi nhiều người dùng cùng lúc hoặc cần scale, cân nhắc Postgres/managed database (xem database production). Dù chọn gì, phải có migration (lịch sử thay đổi cấu trúc dữ liệu có thứ tự), backup và cách khôi phục đã thử qua ít nhất một lần - một bản backup chưa từng thử khôi phục không đáng tin.
Luồng đầy đủ: tạo một đơn hàng
Điều dễ bị bỏ sót: validate phải nằm ở bước 2 (API), không chỉ ở form. Form chỉ chặn được người dùng vô ý gõ sai; API mới chặn được người cố tình gửi thẳng request giả (như bạn vừa làm bằng curl ở trên) mà bỏ qua form hoàn toàn. Nếu chỉ kiểm tra ở form, ai cũng có thể gửi dữ liệu bậy qua curl thẳng vào API.
Bài tập
- Chạy lại hai lệnh
curlở trên, đọc kỹ JSON trả về của cả GET và POST. - Vẽ lại sơ đồ 4 bước ở trên cho chính ứng dụng bạn định build (ví dụ: "khách đặt bàn" thay vì "tạo đơn hàng") - đổi tên 3 hộp và 4 nhãn mũi tên cho đúng ngữ cảnh của bạn.
- Ghi ra ít nhất một trường hợp API phải từ chối (thiếu trường bắt buộc, số âm, hoặc sửa bản ghi không phải của mình) và mã lỗi nên trả về.
Checklist đạt bài
- [ ] Đọc được một JSON đơn giản, chỉ ra đúng tên trường và kiểu dữ liệu.
- [ ] Phân biệt GET, POST, PATCH và DELETE bằng ví dụ của chính mình.
- [ ] Giải thích CRUD và ánh xạ đúng sang 4 HTTP method.
- [ ] Tự gọi được ít nhất một API thật bằng
curlvà đọc được JSON trả về. - [ ] Biết vì sao validate phải nằm ở backend, không chỉ ở form.
Một câu để nhớ: dữ liệu chạy từ form qua API vào database rồi quay lại màn hình, và chốt kiểm tra phải nằm ở API - vì ai cũng gửi thẳng được request giả bỏ qua form.
Bước tiếp theo
Nền tảng đã đủ để đọc code AI viết; giờ quay lại quy trình xây sản phẩm: Cài một coding agent và chạy task đầu tiên →