Xây dựng REST API ‘tốc độ ánh sáng’ với Hono và Cloudflare Workers

Development tutorial - IT technology blog
Development tutorial - IT technology blog

Ác mộng 2 giờ sáng: Khi VPS ‘đầu hàng’ traffic ngoại

2 giờ sáng, điện thoại mình rung bần bật. Sentry báo lỗi liên hồi: con VPS đặt tại Singapore đang ‘thở oxy’. Lượng traffic từ Mỹ và Châu Âu tăng đột biến khiến CPU chạm đỉnh 100%. Người dùng ở xa server phải chịu mức latency (độ trễ) lên tới 2-3 giây, một con số không thể chấp nhận được. Lúc đó mình hiểu ra: kiến trúc server truyền thống với một điểm vật lý duy nhất là rào cản lớn cho ứng dụng toàn cầu.

Thay vì đốt tiền nâng cấp RAM, mình chọn phương án hiệu quả hơn: chuyển core API sang Hono và triển khai lên Cloudflare Workers. Sự kết hợp này mang lại hiệu quả kinh ngạc. Cloudflare Workers đưa code của bạn đến hơn 300 trung tâm dữ liệu toàn cầu, ngay sát vách người dùng. Trong khi đó, Hono là framework siêu nhẹ (core chưa tới 1KB). Tốc độ của nó nhanh đến mức ‘xé gió’, vượt xa Express hay Fastify trong các bài benchmark thực tế.

Khởi tạo môi trường Edge Runtime trong 30 giây

Quên Docker hay cấu hình Nginx phức tạp đi. Cloudflare đã lo từ A đến Z. Bạn chỉ cần mở terminal và gõ đúng một lệnh duy nhất:

npm create cloudflare@latest my-hono-api

Hệ thống sẽ hỏi Framework bạn muốn dùng, hãy chọn Hono. Mình luôn ưu tiên TypeScript. Nó giúp mình bắt được các lỗi ‘undefined’ ngớ ngẩn ngay từ lúc code, thay vì để chúng phát nổ khi đã deploy. Chỉ mất thêm vài giây để cài đặt dependencies:

cd my-hono-api
npm install

Cấu trúc thư mục của Hono cực kỳ tinh gọn. File src/index.ts là linh hồn của project, nơi bạn sẽ xử lý mọi logic request.

Code theo phong cách thực chiến

Bỏ qua mấy ví dụ ‘Hello World’ sách vở. Hãy xây dựng một REST API thực tế với đầy đủ GET, POST và xử lý JSON. Trong quá trình làm, thay vì cài extension nặng máy, mình hay ghé toolcraft.app để format JSON hoặc check regex cho nhanh. Tiện lợi hơn hẳn việc mở đi mở lại VS Code.

Dưới đây là cấu hình src/index.ts chuẩn chỉnh:

import { Hono } from 'hono'
import { cors } from 'hono/cors'

const app = new Hono()

// Chặn đứng lỗi CORS cho anh em làm Frontend
app.use('*', cors())

// Route GET: Kiểm tra trạng thái hệ thống
app.get('/api/v1/status', (c) => {
  return c.json({
    status: 'online',
    timestamp: new Date().toISOString(),
    region: c.req.header('cf-ipcountry') // Header 'xịn' của Cloudflare giúp biết quốc gia của client
  })
})

// Route POST: Tiếp nhận và xử lý data
app.post('/api/v1/data', async (c) => {
  const body = await c.req.json()
  
  if (!body.id) {
    return c.json({ error: 'ID không được để trống' }, 400)
  }

  return c.json({
    message: 'Dữ liệu đã ghi nhận',
    received: body
  }, 201)
})

export default app

Hono ‘ăn tiền’ ở chỗ các middleware như CORS, Logger hay Auth đều có sẵn mà không làm nặng bundle. Với Cloudflare Workers, gói miễn phí giới hạn script dưới 1MB. Vì vậy, càng nhẹ, bạn càng có nhiều đất diễn cho logic nghiệp vụ.

Quản lý biến môi trường an toàn

Đừng bao giờ hớ hênh để API Key trong code. Hãy khai báo chúng vào file wrangler.toml. Đây là quy tắc sống còn để bảo mật project:

[vars]
API_SECRET = "secret-cua-ban"
DB_URL = "https://database-cua-ban.com"

Trong Hono, bạn gọi chúng cực kỳ tự nhiên qua c.env.API_SECRET.

Deploy và Giám sát: Ngủ ngon hơn mỗi đêm

Trước khi ‘lên sóng’, hãy chạy test tại máy nội bộ để chắc chắn mọi thứ trơn tru:

npx wrangler dev

Lệnh này giả lập môi trường Edge ngay trên máy bạn. Khi mọi thứ đã ổn áp, gõ lệnh cuối cùng để ‘phủ sóng’ toàn cầu:

npx wrangler deploy

Chỉ sau 5 giây, API của bạn đã có mặt tại 300 quốc gia. Nhưng đừng chủ quan, một kỹ sư giỏi luôn phải soi dashboard thường xuyên. Với Hono, Median Request Duration (thời gian phản hồi trung bình) thường chỉ rơi vào khoảng 30-50ms. Con số này nhanh gấp 10 lần so với Express chạy trên VPS truyền thống.

Từ ngày chuyển sang bộ đôi này, mình không còn lo server hết RAM hay phải vá lỗi bảo mật OS. Chi phí lại cực rẻ, gói free cho phép tới 100,000 requests mỗi ngày. Nếu VPS của anh em đang ì ạch, hãy thử Serverless ngay, cam đoan sẽ không muốn quay lại kiểu cũ đâu.

Share: