TL; DR: GraphQL leuchtet dort, wo Firebase zu kurz kommt. Leistungsstarke Datenmodellierung, flexible und effiziente Abfragen und die offene Spezifikation sind wesentliche Bestandteile von GraphQL, die in Firebase fehlen.
Leistungsstarke Datenmodellierung
Firebase hat aufgrund seiner begrenzten Datenmodellierung viel Kritik erhalten. Grundsätzlich sind Ihre Daten als ein einziger, riesiger JSON strukturiert, der dieselben Daten mehrmals angibt. Was auf den ersten Blick praktisch erscheint, führt zu nicht verwaltbarem Client-Code, wenn Sie Daten aktualisieren müssen, da Sie alle Verweise auf dieselben Daten manuell nachverfolgen müssen.
Die in GraphQL verwendete Datenstruktur ist dagegen sehr intuitiv und vertraut, da sie als Grafik modelliert wird. Mit der IDL-Syntax können wir unser Datenmodell, das als GraphQL-Schema bezeichnet wird, leicht beschreiben. Für eine Twitter-App könnte das Schema folgendermaßen aussehen:
type Tweet {
id: ID!
title: String!
author: User! @relation(name: "Tweets")
}
type User {
id: ID!
name: String!
tweets: [Tweet!]! @relation(name: "Tweets")
}
Hier definierten wir zwei Typen Tweet
und User
mit einigen skalaren Eigenschaften und auch eine Eins-zu-viele - Beziehung zwischen User
und Tweet
. Einzelne Datenelemente werden als Knoten bezeichnet - und ein Benutzerknoten kann mit vielen Tweet-Knoten verbunden werden. Diese Datenstruktur ist sowohl einfach als auch flexibel, abgesehen vom JSON-Ansatz von Firebase.
Flexible und effiziente Abfragen
Die flexiblen Abfragefunktionen von GraphQL sind einer der Hauptvorteile. Abfragen sind hierarchisch, dh Sie können Datenanforderungen angeben, die die Diagrammstruktur widerspiegeln. In unserem Twitter-Beispiel haben wir möglicherweise eine Abfrage, um alle Benutzer und ihre Tweets abzurufen:
query {
allUsers {
id
name
tweets {
title
}
}
}
Beachten Sie, dass wir Felder, die wir abfragen möchten, frei einschließen oder weglassen können und sogar über Beziehungen hinweg abfragen können. Dies bedeutet, dass wir weder mehrere Abfragen durchführen noch nicht benötigte Daten abfragen müssen, was GraphQL-Abfragen äußerst effizient macht.
Durch Hinzufügen von Abfrageargumenten zum Mix können Funktionen wie eine benutzerdefinierte Reihenfolge oder Filter hinzugefügt werden , um eine leistungsstarke GraphQL-API zu erhalten .
All das ist mit Firebase einfach nicht möglich.
Echtzeitdaten
Die Echtzeitfunktionen von Firebase haben es so beliebt gemacht - aber da die GraphQL-Community im Begriff ist, einen Konsens in Bezug auf Echtzeit zu erzielen , wird auch der größte Vorteil von Firebase zunichte gemacht . Ich empfehle dieses Video-Tutorial zu GraphQL-Abonnements, um die zugrunde liegenden Konzepte besser zu verstehen
Fazit
Um Ihre Frage zu beantworten: GraphQL übertrifft Firebases in den meisten Aspekten und ist daher die bevorzugte Wahl.
Wenn Sie sich für GraphQL interessieren, empfehlen wir Ihnen Graphcool , das die Stärken von GraphQL mit leistungsstarken Funktionen wie integrierter Authentifizierung und flexiblen Hooks für AWS Lambda oder andere serverlose Funktionen kombiniert , um benutzerdefinierte Geschäftslogik zu implementieren.
Haftungsausschluss: Ich arbeite bei Graphcool :)