📝 Long Assignment: Smart API Hub
Hình thức: Cá nhân | Thời gian: 2–3 tuần | Mục tiêu: Xây dựng một REST API Platform tự động sinh API từ file schema.json.
🛠 Tech Stack Bắt Buộc
- Node.js (≥ 20), TypeScript (Strict Mode), Express.js
- PostgreSQL (≥ 15), Knex.js (Có thể dùng ORM như Prisma/TypeORM thay thế)
- Zod, JWT/Bcrypt, Vitest + Supertest, Docker/Docker-compose
📋 Yêu Cầu Chức Năng (Checklist)
1. Khởi tạo & Auto-Migration (1đ)
- Chạy từ file
schema.jsontự chọn (tối thiểu 3 bảng có liên kết, bảngusersphải cóemail,password,role). - Tự động nội suy kiểu dữ liệu và tạo bảng PostgreSQL nếu chưa có.
- Endpoint
GET /healthtrả về status và ping DB thật.
2. Dynamic CRUD (2đ)
- GET
/:resource: Lọc các field với?_fields=col1,col2. - POST / PUT / PATCH / DELETE
/:resource/:id:- Khác biệt chuẩn giữa PUT (thay toàn bộ) vs PATCH (cập nhật 1 phần).
- Tự động update
updated_at. - Whitelist validate input
tableName(chống SQL Injection).
3. Advanced Query (1.5đ)
- Pagination & Sorting:
_page,_limit,_sort,_order(trả về headerX-Total-Count). - Filtering:
_gte,_lte,_ne,_like. - Search:
?q=keywordtìm kiếm trên các cột text.
4. Relationships (Tối ưu N+1 Query) (1.5đ)
- Expand:
GET /:resource?_expand=parentResource(Lấy dữ liệu cha). - Embed:
GET /:resource?_embed=childResource(Lấy dữ liệu con).
5. Authentication & Authorization (1.5đ)
-
POST /auth/register(hash password) &POST /auth/login(cấp JWT). - Middleware bảo vệ routes: Write (C/U/D) → Cần Token (User); DELETE → Chỉ
adminđược xoá.
6. Production Ready (1.5đ)
- Global Error Handler: Bắt lỗi server, DB không bị crash. Response chuẩn
{ "error": "message" }. - Validation (Zod): Bắt buộc check format ở Register, Login và các POST/PUT endpoints. Trả HTTP 400.
- Testing: Viết tối thiểu 10 Test Cases (Vitest + Supertest) cover đủ Happy path, Lỗi 400/401/403/404.
7. Deployment & Docs API (1đ)
- Thiết lập
docker-compose.yamlgộp chung Nodejs app + Postgresql. -
README.mdhướng dẫn chạy chi tiết và vẽ Mermaid Architecture Diagram. - Export bộ Postman Collection đầy đủ.
- Swagger UI
🚀 Tính Năng Bonus (Chọn ≥ 1) (+1đ/tính năng)
[A] Rate Limiting (Tự viết cấp độ Middleware)
- Mô tả: Chống spam request bằng cách tự viết logic giới hạn (dùng In-memory Object/Map, không dùng thư viện có sẵn).
- Yêu cầu: Giới hạn tối đa 100 request / 1 phút / 1 IP.
- Kết quả: Vượt ngưỡng trả về lỗi
429 Too Many Requests. (Nên có thêm Headers nhưX-RateLimit-LimitvàX-RateLimit-Remaining).
[B] Response Caching (Tối ưu Hiệu năng)
- Mô tả: Giảm tải database bằng cách lưu bộ đệm cho các request đọc dữ liệu.
- Yêu cầu: Lưu Cache in-memory các lệnh
GETvới tuổi thọ (TTL) là 30 giây. - Invalidation: Bắt buộc phải tự động xoá cache của một resource cụ thể ngay khi có hành động ghi (POST/PUT/PATCH/DELETE) vào resource đó.
[C] Audit Log (Lưu vết Hệ thống)
- Mô tả: Theo dõi lịch sử những ai đã can thiệp thay đổi dữ liệu trong hệ thống.
- Yêu cầu: Bắt sự kiện thao tác Write (C/U/D) thành công.
- Kết quả: Ghi tự động một dòng vào bảng
audit_logs(lưu ngầm không block luồng response) chứa:user_id,action (CREATE/UPDATE/DELETE),resource_name,record_id,timestamp.
📤 Tiêu Chí Nộp Bài
- Upload GitHub public
smart-api-hubchứa: Source code,Dockerfile,docker-compose.yaml,.env.example(cấm push.env). - Code sạch, commit message gọn gàng, có thể clone về gõ
docker-compose uplà chạy.
Made by Anh Tu - Share to be share