Bối cảnh
API phục vụ toàn bộ site pinit: bài viết, project, đăng nhập, hồ sơ. Mục tiêu là có backend đủ thật để frontend phát triển và deploy được, mà không phải dựng database và service riêng.
Vấn đề
json-server cho CRUD miễn phí nhưng dừng ở đó: không xác thực, không tài
liệu, và mặc định chỉ chạy trên máy. Muốn dùng thật thì phải bù ba phần đó.
Giải pháp
Giữ json-server lo phần CRUD, bọc thêm tầng Express cho những gì nó thiếu:
- Đăng nhập bằng
jsonwebtoken— cấp JWT, route cần quyền thì kiểm token -
Tài liệu sinh bằng
swagger-jsdoc+swagger-ui-express, mở tại/api-docsđể frontend tra cứu mà không cần đọc code - Dữ liệu mẫu sinh bằng
fakerqua script riêng, không phải gõ tay
CI/CD bằng GitHub Actions: build image amd64 ngay trên runner, đẩy lên ghcr, rồi ssh vào VPS chạy compose. Một workflow riêng dọn image cũ và giữ lại 10 bản mới nhất — không có nó thì registry phình theo mỗi lần build.
Kết quả
- 4 nhóm endpoint:
/posts,/works,/login,/profile - Đang phục vụ thật cho pinit — trang chủ và trang project lấy dữ liệu từ đây
- Tài liệu Swagger mở công khai, dùng được ngay để thử endpoint