TL;DR : GraphQL brille là où Firebase échoue. Une modélisation puissante des données, des requêtes flexibles et efficaces et une spécification ouverte sont autant d'éléments essentiels de GraphQL qui font défaut à Firebase.
Modélisation puissante des données
Firebase a fait l'objet de nombreuses critiques en raison de sa modélisation limitée des données. Fondamentalement, vos données sont structurées comme un seul et énorme JSON qui énonce les mêmes données plusieurs fois. Ce qui semble pratique à première vue se traduit par un code client ingérable chaque fois que vous devez mettre à jour des données, car vous devez garder la trace des éléments suivants todo les références aux mêmes données manuellement.
En revanche, la structure de données utilisée dans GraphQL est très intuitive et familière, car elle est modélisée sous forme de graphe. En utilisant le Syntaxe IDL nous pouvons facilement décrire notre modèle de données, appelé schéma GraphQL. Pour une application Twitter, le schéma pourrait ressembler à ceci :
type Tweet {
id: ID!
title: String!
author: User! @relation(name: "Tweets")
}
type User {
id: ID!
name: String!
tweets: [Tweet!]! @relation(name: "Tweets")
}
Nous avons défini ici deux types Tweet
y User
avec certaines propriétés scalaires et aussi un relation de type "un à plusieurs". entre User
y Tweet
. Les éléments de données individuels sont appelés noeuds - et un noeud utilisateur peut être connecté à de nombreux noeuds tweet. Cette structure de données est à la fois simple et flexible, contrairement à l'approche JSON de Firebase.
Des requêtes flexibles et efficaces
La souplesse des capacités d'interrogation de GraphQL est l'un de ses principaux avantages. Les requêtes sont hiérarchiques, ce qui signifie que vous pouvez spécifier des exigences de données qui reflètent la structure du graphe. Dans notre exemple Twitter, nous pourrions avoir une requête pour récupérer tous les utilisateurs et leurs tweets :
query {
allUsers {
id
name
tweets {
title
}
}
}
Notez que nous pouvons librement inclure ou exclure les champs que nous souhaitons interroger, et que nous pouvons même effectuer des recherches dans plusieurs relations. Cela signifie que nous n'avons pas besoin d'effectuer plusieurs requêtes ni d'interroger des données inutiles, ce qui rend les requêtes GraphQL extrêmement efficaces.
En ajoutant des arguments de requête au mélange, nous pouvons ajouter des fonctionnalités telles qu'un ordre personnalisé ou des filtres afin d'obtenir une puissante API GraphQL .
Tout cela n'est tout simplement pas possible avec Firebase.
Données en temps réel
Les capacités en temps réel de Firebase l'ont rendu si populaire - mais comme la communauté GraphQL est sur le point d'atteindre un consensus concernant le temps réel En conséquence, le plus grand avantage de Firebase est également réduit à néant. Je recommande ce tutoriel vidéo sur les abonnements GraphQL pour mieux comprendre les concepts sous-jacents
Conclusion
Donc, pour répondre à votre question : GraphQL surpasse Firebases dans la plupart des aspects, ce qui en fait le choix privilégié.
Si vous vous intéressez à GraphQL, je vous encourage à consulter le site suivant Graphcool qui combine les forces de GraphQL avec des fonctionnalités puissantes comme l'authentification intégrée et des crochets flexibles pour AWS Lambda ou d'autres fonctions sans serveur pour mettre en œuvre une logique commerciale personnalisée.
Clause de non-responsabilité : je travaille chez Graphcool :)
3 votes
J'ai écrit à ce sujet ici : medium.com/@brandon_74967/firebase-you-2017-ed-81462ef8775f
0 votes
Vous pourriez essayer apollo-link-firebase github.com/Canner/apollo-link-firebase vous permet d'interroger firebase avec graphQL sans service dorsal.
4 votes
Nous venons de créer un outil open-source pour vous aider à passer de Firebase à GraphQL en temps réel, en faisant migrer vos données vers Postgres. github.com/hasura/graphql-engine/tree/master/community/tools/
0 votes
Je seconde le commentaire précédent. Hasura est GÉNIAL !
0 votes
Projet open source utilisant Firebase dans un serveur GraphQL : github.com/rwieruch/nextjs-firebase-authentication