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.