GraphQL

GraphQL cho vị trí Senior Backend / Tech Lead, viết cho người chưa dùng GraphQL bao giờ: từ bài toán gốc tới vận hành nhiều team. Nên đọc theo thứ tự 1 → 5. Mọi output là output thật: graphql-js 17.0.2 + DataLoader 2.2.3 trên Node 22, Apollo Server 5 + Federation 2, Lighthouse 6.71 trên Laravel 13 + PostgreSQL 18.4.

Bài 1 · Nền tảng

GraphQL là gì thật sự — bài toán gốc, mô hình tư duy, khi nào KHÔNG dùng

Facebook 2012; REST, BFF và GraphQL đo bằng lab (2 lượt / 7 096 byte so với 1 lượt / 443 byte); mutation không có transaction; ma trận chọn REST, BFF, GraphQL, gRPC.

Bài 2 · Thực thi

Một query chạy thế nào — parse, validate, execute, lỗi từng phần

32 luật validate; gọi thẳng execute() là bỏ qua validate; null lan truyền xoá trắng cả khối; abort không dừng câu SQL đang chạy; @defer; tracing qua diagnostics_channel.

Bài 3 · Hiệu năng

N+1 và DataLoader — Node và Lighthouse (Laravel)

2 051 → 4 câu SQL trên PostgreSQL; DataLoader gom key theo tick; trả sai thứ tự là lộ dữ liệu; loader dùng chung giữa request; giới hạn 65 535 tham số; LIMIT theo từng cha.

Bài 4 · Bảo mật

Bảo mật GraphQL — query sâu, alias, DoS ở validate, CSRF, phân quyền theo field

10 000 lần thử OTP trong 1 request; query 23 KB làm validate mất 11 giây và 1,2 GB; Lighthouse mặc định mở hết giới hạn và chạy mutation từ GET/form.

Bài 5 · Vận hành

Vận hành GraphQL — HTTP và cache, giám sát, tiến hoá schema, federation

Lỗi nằm trong HTTP 200; CDN + APQ và cái bẫy no-store; chặn breaking change trong CI; query plan federation; subgraph chết làm data null; license Elastic-2.0.