TL; DR: GraphQL tỏa sáng khi Firebase thiếu hụt. Mô hình hóa dữ liệu mạnh mẽ, các truy vấn linh hoạt và hiệu quả và đặc điểm kỹ thuật mở là tất cả các phần thiết yếu của GraphQL mà Firebase còn thiếu.
Mô hình hóa dữ liệu mạnh mẽ
Firebase đã nhận được rất nhiều lời chỉ trích dựa trên mô hình dữ liệu hạn chế của nó. Về cơ bản, dữ liệu của bạn được cấu trúc dưới dạng một JSON khổng lồ, duy nhất trình bày cùng một dữ liệu nhiều lần. Điều gì có vẻ thuận tiện lúc đầu dẫn đến mã máy khách không thể quản lý bất cứ khi nào bạn cần cập nhật dữ liệu, vì bạn phải theo dõi tất cả các tham chiếu đến cùng một dữ liệu theo cách thủ công.
Mặt khác, cấu trúc dữ liệu được sử dụng trong GraphQL rất trực quan và quen thuộc khi nghĩ về nó, vì nó được mô hình hóa dưới dạng đồ thị. Sử dụng cú pháp IDL, chúng ta có thể dễ dàng mô tả mô hình dữ liệu của mình, được gọi là lược đồ GraphQL. Đối với ứng dụng Twitter, lược đồ có thể trông như sau:
type Tweet {
id: ID!
title: String!
author: User! @relation(name: "Tweets")
}
type User {
id: ID!
name: String!
tweets: [Tweet!]! @relation(name: "Tweets")
}
Ở đây chúng tôi đã xác định hai kiểu Tweet
và User
với một số thuộc tính vô hướng và cũng có mối quan hệ một-nhiều giữa User
và Tweet
. Các mục dữ liệu đơn lẻ được gọi là các nút - và một nút người dùng có thể được kết nối với nhiều nút tweet. Cấu trúc dữ liệu này vừa đơn giản vừa linh hoạt, khác với cách tiếp cận JSON từ Firebase.
Truy vấn linh hoạt và hiệu quả
Khả năng truy vấn linh hoạt của GraphQL là một trong những lợi ích chính của nó. Truy vấn có thứ bậc, có nghĩa là bạn có thể chỉ định các yêu cầu dữ liệu phản ánh cấu trúc đồ thị. Trong ví dụ Twitter của chúng tôi, chúng tôi có thể có một truy vấn để tìm nạp tất cả người dùng và tweet của họ:
query {
allUsers {
id
name
tweets {
title
}
}
}
Lưu ý rằng chúng tôi có thể tự do bao gồm hoặc bỏ qua các trường mà chúng tôi muốn truy vấn và thậm chí chúng tôi có thể truy vấn trên các quan hệ. Điều này có nghĩa là chúng tôi không cần phải thực hiện nhiều truy vấn cũng như không phải truy vấn dữ liệu không cần thiết - làm cho các truy vấn GraphQL trở nên cực kỳ hiệu quả.
Thêm đối số truy vấn vào hỗn hợp, chúng tôi có thể thêm các tính năng như đơn đặt hàng tùy chỉnh hoặc bộ lọc để có được API GraphQL mạnh mẽ .
Tất cả những điều đó chỉ đơn giản là không thể thực hiện được với Firebase.
Dữ liệu theo thời gian thực
Khả năng thời gian thực của Firebase đã khiến nó trở nên phổ biến - nhưng vì cộng đồng GraphQL sắp đạt được sự đồng thuận về thời gian thực , nên lợi thế lớn nhất của Firebase cũng bị vô hiệu hóa. Tôi đề xuất hướng dẫn bằng video này về đăng ký GraphQL để hiểu rõ hơn về các khái niệm cơ bản
Phần kết luận
Vì vậy, để trả lời câu hỏi của bạn: GraphQL vượt qua Firebases về hầu hết các khía cạnh khiến nó trở thành lựa chọn ưu tiên.
Nếu bạn quan tâm đến GraphQL, tôi khuyến khích bạn nên xem Graphcool kết hợp các điểm mạnh của GraphQL với các tính năng mạnh mẽ như xác thực tích hợp và móc linh hoạt với AWS Lambda hoặc các chức năng không máy chủ khác để triển khai logic nghiệp vụ tùy chỉnh.
Tuyên bố từ chối trách nhiệm: Tôi làm việc tại Graphcool :)