Lesson 50 — GraphQL
Ba mô-đun tương tác: (1) GraphQL vs REST — 1 query thay N request; (2) N+1 → DataLoader — gom ID batch 1 query; (3) Query depth limit — chặn query đệ quy sâu.
1. GraphQL vs REST — 1 query thay N request
Cùng một màn hình cần: user + 3 post + mỗi post 2 comment. REST phải đi nhiều round-trip; GraphQL gom thành 1 query duy nhất. Bấm "Fetch" để xem.
REST: 0 request
GraphQL: 0 request
🔴 REST — nhiều endpoint
🟣 GraphQL — 1 endpoint
2. N+1 problem → DataLoader (batch + cache)
Query { users { posts } } với 4 user. Resolver naive gọi DB cho từng user (1+N).
DataLoader gom toàn bộ user-ID rồi batch WHERE user_id IN (...) chỉ 1 query.
DB query: 0
Users (parent)
Database
chờ query...
log...
3. Query depth limit — chống DoS
Nhập query (kiểu rút gọn, dùng { } lồng nhau). Trang tính depth = số cấp lồng sâu nhất,
so với limit. Query đệ quy friends { friends { ... } } sẽ vượt limit và bị reject.