GraphQL
GraphQL đảo lại một chuyện: bên gọi tự khai mình cần dữ liệu hình dạng nào. Ba chặng, đi từ viết được một câu query tới hiểu cái giá phải trả.
9 cột mốc · 2 có bài trong app
Bắt đầu
1Viết được một câu query
Xin đúng những trường bạn cần, không thừa một trường nào.
- Query và shapecó bàiResponse trả về đúng hình dạng bạn vừa xin. Không thừa, không thiếu, không phải đoán.
- Một request nhiều nguồncó bàiMột câu query có thể chạm tới nhiều nguồn dữ liệu ở phía máy chủ.
- Biến và fragmenttự tìm hiểuTham số hoá câu query, và gom những mẩu hay lặp lại.
2Phía máy chủ
Hiểu ai thật sự đi lấy dữ liệu khi bạn xin một trường.
- Schema và typetự tìm hiểuHợp đồng giữa hai bên, máy đọc được — đây là chỗ GraphQL mạnh nhất.
- Resolvertự tìm hiểuMỗi trường có một hàm đi lấy giá trị cho nó. Cây query gọi cây resolver.
- Mutationtự tìm hiểuGhi dữ liệu. Tách riêng khỏi query để rõ cái nào có tác dụng phụ.
3Cái giá phải trả
Biết ba chỗ GraphQL đắt hơn REST, để chọn cho đúng việc.
- Vấn đề N+1tự tìm hiểuMột query xin danh sách kèm tác giả có thể thành hàng trăm truy vấn database.
- Cache khó hơntự tìm hiểuMọi thứ đi qua một endpoint POST, nên cache theo URL của HTTP không dùng được nữa.
- Query quá nặngtự tìm hiểuNgười gọi có thể xin một câu lồng mười tầng. Phải giới hạn độ sâu và độ phức tạp.
Đích
Lộ trình dừng ở đây
Ba chặng trên đủ để quyết định có nên dùng GraphQL cho một dự án hay không. Phần dưới là hướng đi tiếp.
- DataLoaderCách chuẩn để dập vấn đề N+1: gom nhiều lần hỏi thành một.
- SubscriptionNhánh thời gian thực của GraphQL, chạy trên WebSocket.
- Persisted queryGửi mã của câu query thay vì cả câu — nhẹ hơn và chặn được query lạ.