Backend Serverless: Cloudflare Pages Functions & KV
1. Kiến Trúc Serverless Tại Rìa Mạng (Edge)
Thay vì phải duy trì một máy chủ Node.js hay VPS tốn kém, toàn bộ tác vụ backend của Portfolio được xử lý bằng Cloudflare Pages Functions — một giải pháp Serverless Function chạy tức thời trên hạ tầng mạng gồm hơn 300 trung tâm dữ liệu toàn cầu của Cloudflare.
- Chi phí vận hành: 0 VNĐ (Nằm trọn trong hạn ngạch 100,000 requests/ngày của gói Cloudflare Free Tier).
- Độ trễ phản hồi: Siêu thấp (< 30ms tại Việt Nam nhờ điểm hiện diện Edge CDN).
2. Các Endpoint REST API
2.1. GET /api/data
Lấy dữ liệu danh mục dự án và hồ sơ Stylist mới nhất.
- Quy trình xử lý:
- Kiểm tra Cloudflare KV binding
PORTFOLIO_KVxem keyPORTFOLIO_DATAcó tồn tại không. - Nếu có trong KV $\rightarrow$ Trả về payload JSON từ KV kèm header
Cache-Control. - Nếu KV chưa có $\rightarrow$ Đọc nội dung tệp tĩnh
data.jsonvà trả về client.
- Kiểm tra Cloudflare KV binding
2.2. POST /api/save
Lưu toàn bộ dữ liệu mới do Stylist chỉnh sửa từ trình Live Editor.
- Headers yêu cầu:
Content-Type: application/jsonX-Admin-Pin: <mã_pin_của_stylist>
- Quy trình xử lý:
- Đọc biến môi trường
env.CF_ADMIN_PINtrên Cloudflare. - So sánh mã PIN gửi lên. Nếu không khớp $\rightarrow$ Trả về
HTTP 401 Unauthorized. - Kiểm tra tính hợp lệ của cấu trúc dữ liệu JSON (profile, experience, projects).
- Ghi trực tiếp payload vào
PORTFOLIO_KV.put('PORTFOLIO_DATA', JSON.stringify(data)). - Trả về
HTTP 200 OKkèm thông báo thành công.
- Đọc biến môi trường
3. Cấu Trúc Bảng Dữ Liệu PORTFOLIO_DATA (JSON Schema)
json
{
"profile": {
"name": "Trần Tú Linh",
"handle": "Stella Tran",
"tagline": "Fashion Stylist & Personal Styling Consultant",
"avatar": "linh.webp",
"bio": "Không gian lưu trữ các đồ án thiết kế...",
"stats": [
{ "number": "08+", "label": "BỘ SƯU TẬP & DỰ ÁN" },
{ "number": "06", "label": "NĂM SÁNG TẠO" },
{ "number": "100%", "label": "Ý TƯỞNG ĐỘC BẢN" }
]
},
"vision": {
"title": "Thời trang là ngôn ngữ thị giác...",
"manifesto": "Mỗi thiết kế là sự dung hòa..."
},
"experience": [
{
"id": "exp-1",
"period": "2024 — Hiện tại",
"role": "Đồ Án Tốt Nghiệp & Thiết Kế Độc Lập",
"company": "Xưởng Thực Nghiệm Thời Trang",
"desc": "Nghiên cứu phom dáng cấu trúc..."
}
],
"projects": [
{
"id": "proj-1",
"title": "Bộ Sưu Tập: The Autumn Edit — Wild Cherry",
"category": "Lookbook / BST",
"year": "2026",
"cover_image": "assets/projects/proj-1-1.webp",
"images": ["assets/projects/proj-1-1.webp"],
"desc": "Nghiên cứu phom dáng trên nền chất liệu nhung đỏ mận..."
}
]
}