Skip to content

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ý:
    1. Kiểm tra Cloudflare KV binding PORTFOLIO_KV xem key PORTFOLIO_DATA có tồn tại không.
    2. Nếu có trong KV $\rightarrow$ Trả về payload JSON từ KV kèm header Cache-Control.
    3. Nếu KV chưa có $\rightarrow$ Đọc nội dung tệp tĩnh data.json và trả về client.

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/json
    • X-Admin-Pin: <mã_pin_của_stylist>
  • Quy trình xử lý:
    1. Đọc biến môi trường env.CF_ADMIN_PIN trên Cloudflare.
    2. So sánh mã PIN gửi lên. Nếu không khớp $\rightarrow$ Trả về HTTP 401 Unauthorized.
    3. Kiểm tra tính hợp lệ của cấu trúc dữ liệu JSON (profile, experience, projects).
    4. Ghi trực tiếp payload vào PORTFOLIO_KV.put('PORTFOLIO_DATA', JSON.stringify(data)).
    5. Trả về HTTP 200 OK kèm thông báo thành cô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..."
    }
  ]
}

Hệ thống Portfolio & Fashion CMS Trần Tú Linh