TL; DR: GraphQL світить там, де Firebase не відповідає. Потужне моделювання даних, гнучкі та ефективні запити та відкрита специфікація - все це важливі частини GraphQL, яких бракує у Firebase.
Потужне моделювання даних
Firebase отримав багато критики на основі обмеженого моделювання даних. По суті, ваші дані структуровані як єдиний величезний JSON, який кілька разів констатує одні й ті самі дані. Те, що спочатку здається зручним, призводить до некерованого клієнтського коду кожного разу, коли потрібно оновлювати дані, оскільки вам доведеться відстежувати всі посилання на ті самі дані вручну.
Структура даних, що використовується в GraphQL, з іншого боку, дуже інтуїтивна і звична для роздумів, оскільки вона змодельована як графік. Використовуючи синтаксис IDL, ми можемо легко описати нашу модель даних, яка називається схемою GraphQL. Для програми Twitter схема може виглядати так:
type Tweet {
id: ID!
title: String!
author: User! @relation(name: "Tweets")
}
type User {
id: ID!
name: String!
tweets: [Tweet!]! @relation(name: "Tweets")
}
Тут ми визначили два типи Tweet
і User
з деякими скалярними властивостями , а також один-до-багатьох між User
і Tweet
. Поодинокі елементи даних називаються вузлами - і вузол користувача може бути підключений до багатьох вузлів твіту. Ця структура даних є одночасно простою та гнучкою, крім підходу JSON від Firebase.
Гнучкі та ефективні запити
Можливість гнучких запитів GraphQL - одна з головних його переваг. Запити є ієрархічними, це означає, що ви можете вказати вимоги до даних, що відображають структуру графіка. У нашому прикладі в Twitter ми можемо мати запит, щоб отримати всіх користувачів та їх твіти:
query {
allUsers {
id
name
tweets {
title
}
}
}
Зверніть увагу, що ми можемо вільно включати або залишати поля, які ми хочемо запитувати, і навіть можемо робити запити в різних відносинах. Це означає, що нам не потрібно робити декілька запитів, і ми не запитуємо непотрібні дані - що робить запити GraphQL надзвичайно ефективними.
Додаючи аргументи запиту до суміші, ми можемо додати такі функції, як спеціальний порядок або фільтри, щоб отримати потужний API GraphQL .
Все це просто неможливо з Firebase.
Дані в режимі реального часу
Можливості Firebase у реальному часі зробили його настільки популярним, але оскільки спільнота GraphQL збирається досягти консенсусу щодо реального часу , найбільша перевага Firebase також зводиться нанівець. Я рекомендую цей відеоурок з підписки на GraphQL, щоб краще зрозуміти основні концепції
Висновок
Отже, щоб відповісти на ваше запитання: GraphQL перевершує Firebases у більшості аспектів, що робить його кращим вибором.
Якщо вас цікавить GraphQL, я рекомендую вам перевірити Graphcool, який поєднує в собі сильні сторони GraphQL з такими потужними функціями, як вбудована автентифікація та гнучкі гачки для AWS Lambda або інші безсерверні функції для реалізації власної бізнес-логіки.
Застереження: я працюю в Graphcool :)