Tại sao cần Backend API riêng?
Không phải nghiệp vụ nào cũng có thể chạy trực tiếp trong trình duyệt. Một số tác vụ bắt buộc phải chạy ở phía server vì lý do bảo mật.Chạy ở trình duyệt ❌
Mọi người dùng đều thấy code và logic. Không thể giấu API key, mật khẩu, hay quy tắc tính toán.
Chạy ở server ✅
Code chỉ chạy trên máy chủ. Người dùng chỉ nhận được kết quả — không thấy logic bên trong.
Những nghiệp vụ cần chạy ở server
Next.js API Route là gì?
API Route là tính năng của Next.js cho phép bạn viết backend server ngay trong dự án frontend — không cần server riêng.Cách hoạt động
Cấu trúc thư mục API Route
Trong Next.js, mỗi file trong thư mụcapp/api/ trở thành một URL endpoint tự động.
Quy tắc đặt tên: Mỗi folder trong
app/api/ cần một file route.ts — đây là file xử lý request. Tên folder trở thành URL path. Ví dụ: app/api/send-email/route.ts → truy cập tại https://yourdomain.com/api/send-email.Biến môi trường — Nơi cất giữ bí mật
Trước khi đi vào từng nghiệp vụ, bạn cần hiểu biến môi trường — cách an toàn để lưu API key và thông tin nhạy cảm.Các nghiệp vụ bảo mật phổ biến
1. Gửi email
Gửi email cần API key từ dịch vụ như SendGrid, Resend, hoặc Nodemailer. Key này phải giữ bí mật ở server. Các loại email thường gặp:Email xác nhận đăng ký khóa học
Email xác nhận đăng ký khóa học
Học viên đăng ký khóa → server gửi email xác nhận kèm chi tiết khóa học, thời gian, link truy cập.Khi mô tả cho Claude Code:
Email nhắc học phí
Email nhắc học phí
Tự động gửi email nhắc khi học phí sắp đến hạn hoặc đã quá hạn.Khi mô tả cho Claude Code:
Email cấp chứng chỉ
Email cấp chứng chỉ
Học viên hoàn thành khóa → server tạo chứng chỉ PDF và gửi kèm email.Khi mô tả cho Claude Code:
2. Thanh toán
Tích hợp thanh toán với VNPay, MoMo, hoặc Stripe đòi hỏi Secret Key phải ở server — lộ ra client là nguy cơ mất tiền ngay lập tức. Luồng thanh toán điển hình: Khi mô tả cho Claude Code:3. Xuất báo cáo PDF / Excel
Tạo file báo cáo phức tạp cần thư viện nặng — chạy ở server để không làm chậm trình duyệt. Các loại báo cáo phổ biến:
Khi mô tả cho Claude Code:
4. Tích hợp AI
Gọi API OpenAI, Gemini, hoặc Claude cần API key bí mật. Logic prompt cũng là tài sản cần bảo vệ. Các ứng dụng AI trong LMS:Chấm bài tự luận tự động
Chấm bài tự luận tự động
Học viên nộp bài tự luận → AI chấm điểm và nhận xét → lưu kết quả Firestore.Khi mô tả cho Claude Code:
Tạo câu hỏi ôn tập tự động
Tạo câu hỏi ôn tập tự động
Giáo viên nhập nội dung bài học → AI tạo câu hỏi trắc nghiệm, điền từ.Khi mô tả cho Claude Code:
Chatbot hỗ trợ học viên
Chatbot hỗ trợ học viên
Học viên hỏi bài → AI trả lời dựa trên nội dung khóa học.Khi mô tả cho Claude Code:
5. Webhook — Nhận dữ liệu từ bên ngoài
Webhook là URL mà dịch vụ bên ngoài gọi vào khi có sự kiện xảy ra. Ví dụ: Zalo gọi khi có tin nhắn mới, Stripe gọi khi thanh toán xong. Các webhook phổ biến trong LMS:
Khi mô tả cho Claude Code:
Bảo mật API Route
API Route là backend — nhưng bạn vẫn cần bảo vệ chúng. Ai có URL cũng có thể gọi nếu không có kiểm soát.Kiểm tra xác thực (Authentication)
Trước khi xử lý request, luôn kiểm tra người gọi là ai và có quyền không. Khi mô tả cho Claude Code:Giới hạn tần suất (Rate Limiting)
Ngăn người dùng gọi API quá nhiều lần liên tục (tránh spam, tránh lạm dụng).Xác minh Webhook
Webhook cần xác minh đúng dịch vụ gửi — không phải ai giả mạo URL.Cấu trúc hoàn chỉnh cho LMS
Đây là cái nhìn tổng thể về tất cả API Route cho một ứng dụng LMS hoàn chỉnh:Mô tả API Route cho Claude Code
Khi yêu cầu Claude Code tạo API Route, hãy mô tả đủ 4 thành phần:1
URL và phương thức
Tạo API Route tại
/api/email/enrollment-confirm nhận POST request.2
Dữ liệu đầu vào
Body gồm:
studentId (ID học viên), courseId (ID khóa học), startDate (ngày bắt đầu).3
Quy trình xử lý
- Kiểm tra token xác thực → 2. Đọc thông tin từ Firestore → 3. Gửi email → 4. Cập nhật trạng thái.
4
Kết quả trả về
Nếu thành công:
{ success: true, messageId: "..." }. Nếu lỗi: { error: "Mô tả lỗi" } với HTTP status 400/500.Câu hỏi thường gặp
API Route có chạy 24/7 không? Có tốn tiền không?
API Route có chạy 24/7 không? Có tốn tiền không?
API Route không chạy liên tục — chỉ chạy khi có request đến, xong thì tắt. Cơ chế này giống Cloud Functions.Trên Vercel (nơi deploy Next.js phổ biến nhất):
- Gói miễn phí: 100GB bandwidth, 100K function invocations/tháng
- Đủ dùng cho LMS nhỏ-trung bình (vài trăm học viên)
- Khi vượt: khoảng $0.60/triệu lượt gọi — rất rẻ
Có thể gọi API Route từ ứng dụng khác không?
Có thể gọi API Route từ ứng dụng khác không?
Có. API Route là URL bình thường — bất kỳ ứng dụng nào cũng gọi được (mobile app, Postman, Python script…).Tuy nhiên, bạn cần kiểm soát CORS (Cross-Origin Resource Sharing) nếu muốn giới hạn chỉ domain của mình gọi được.Khi mô tả cho Claude Code:
Làm sao biết API Route có lỗi không?
Làm sao biết API Route có lỗi không?
Trên Vercel, bạn vào Dashboard → Functions → Logs để xem log thời gian thực.Ngoài ra, yêu cầu Claude Code thêm logging:
API Route và trang web Next.js có chung hosting không?
API Route và trang web Next.js có chung hosting không?
Có — khi bạn deploy Next.js lên Vercel, cả trang web (frontend) và API Route (backend) đều chạy trên cùng một hạ tầng, cùng một domain.Ví dụ: Domain
https://myapp.comhttps://myapp.com/dashboard→ Trang dashboard (frontend)https://myapp.com/api/send-email→ API gửi email (backend)
Tóm tắt
Bước tiếp theo: Đọc bài Prompt Rules để hiểu cách mô tả yêu cầu kỹ thuật cho Claude Code một cách hiệu quả nhất.