GraphQL comprend un système de types, un langage de requête et une sémantique d'exécution, une validation statique et une introspection de types, décrits ci-dessous. Pour vous guider à travers chacun de ces composants, nous avons écrit un exemple conçu pour illustrer les différentes parties de GraphQL.
- https://github.com/facebook/graphql
Falcor vous permet de représenter toutes vos sources de données distantes en tant que modèle à domaine unique via un graphique JSON virtuel. Vous codez de la même manière, où que se trouvent les données, que ce soit en mémoire sur le client ou sur le réseau sur le serveur.
- http://netflix.github.io/falcor/
Quelle est la différence entre Falcor et GraphQL (dans le contexte de Relay)?
J'ai visualisé le Angular Air Episode 26: FalcorJS et Angular 2 où Jafar Husain répond comment GraphQL se compare à FalcorJS . Ceci est le résumé (paraphrasant):
genres[0..10]
. Mais il ne prend pas en charge les requêtes ouvertes, par exemple. genres[0..*]
.Jafar affirme que dans la plupart des applications, les types de requêtes qui vont d'un client à un serveur partagent la même forme. Par conséquent, le fait d'avoir des opérations spécifiques et prévisibles telles que get et set expose plus d'opportunités pour exploiter le cache. En outre, de nombreux développeurs sont habitués à mapper les demandes à l’aide d’un simple routeur dans l’architecture REST.
La discussion finale a pour but de déterminer si la puissance fournie par GraphQL l'emporte sur la complexité.
J'ai maintenant écrit des applications avec les deux bibliothèques et je peux accepter tout ce qui est écrit dans le message de Gajus, mais j'ai constaté que certains éléments différents étaient les plus importants dans ma propre utilisation des frameworks.
Lee Byron l'un des ingénieurs derrière GraphQL a fait un AMA sur hashnode , voici sa réponse à cette question:
- Falcor renvoie les valeurs observables et GraphQL. La façon dont Netflix a voulu utiliser Falcor a beaucoup de sens pour elles. Ils font plusieurs demandes et présentent des données dès qu’ils sont prêts, mais cela signifie également que le développeur client doit travailler directement avec les observables. GraphQL est un modèle de requête/réponse et renvoie JSON, qui est trivialement facile à utiliser. Relay rajoute au dynamisme présenté par Falcor tout en ne conservant que des valeurs claires.
- Système de type. GraphQL est défini en termes de système de type, ce qui nous a permis de construire de nombreux outils intéressants tels que GraphiQL, des générateurs de code, la détection d'erreur, etc. Falcor est beaucoup plus dynamique, ce qui est précieux, mais limite la capacité de faire ce genre de chose.
- Utilisation du réseau. GraphQL a été conçu à l’origine pour faire fonctionner le fil de nouvelles de Facebook sur des appareils bas de gamme, même sur des réseaux bas de gamme. déclarez tout ce dont vous avez besoin dans une seule demande réseau afin de minimiser la latence. Falcor, en revanche, effectue souvent plusieurs allers-retours pour collecter des données supplémentaires. Il ne s’agit en réalité que d’un compromis entre la simplicité du système et le contrôle du réseau. Pour Netflix, ils s’appliquent également à des appareils très bas de gamme (par exemple, une clé Roku), mais l’hypothèse est que le réseau sera suffisamment bon pour diffuser de la vidéo.
Edit: Falcor peut en effet requêtes par lots , rendant le commentaire sur l’utilisation du réseau inexact. Merci à @PrzeoR
MISE À JOUR: J'ai trouvé le commentaire très utile sous mon message que je souhaite partager avec vous en complément du contenu principal:
En ce qui concerne le manque d’exemples, vous pouvez trouver le dépôt awesome-falcorjs convivial, il existe différents exemples d’utilisation d’un CRUD par Falcor: https://github.com/przeor/awesome-falcorjs ... Deuxième chose , il existe un livre intitulé " Mastering Full Stack React Développement) " ", qui inclut également Falcor (bon moyen d'apprendre à l'utiliser):
ORGINAL POST CI-DESSOUS:
FalcorJS ( https://www.facebook.com/groups/falcorjs/ ) est beaucoup plus simple pour être efficace par rapport à Relay/GraphQL.
La courbe d’apprentissage de GraphQL + Relay est énorme:
Dans mon bref résumé: Allez pour Falcor. Utilisez Falcor dans votre prochain projet jusqu'à ce que VOUS ayez un budget important et beaucoup de temps d’apprentissage pour votre équipe, puis utilisez RELAY + GRAPHQL.
GraphQL + Relay a une API énorme dans laquelle vous devez être efficace. Falcor a une petite API et est très facile à comprendre pour tout développeur front-end qui connaît JSON.
Si vous avez un projet AGILE avec des ressources limitées -> alors optez pour FalcorJS!
Mon opinion SUBJECTIVE: FalcorJS est 500% + plus facile d’être efficace en javascript full-stack.
J'ai également publié des kits de démarrage FalcorJS sur mon projet (+ plusieurs exemples de projets Falcor complets): https://www.github.com/przeor
Pour être plus dans les détails techniques:
1) Lorsque vous utilisez Falcor, vous pouvez utiliser à la fois le front-end et le back-end:
importer falcor de 'falcor';
puis construisez votre modèle en fonction de.
... vous avez également besoin de deux bibliothèques simples à utiliser sur le backend: a) falcor-express - vous l’utilisez une fois (ex. app.use ('/ model.json', FalcorServer .dataSourceRoute (() => new NamesRouter ())) ). Source: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/index.js
b) falcor-router - là vous définissez des routes SIMPLE (ex. route: '_view.length'). Source: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/router.js
Falcor est un jeu d'enfant en termes de courbe d'apprentissage.
Vous pouvez également voir la documentation qui est beaucoup plus simple que la bibliothèque de FB et consulter également l'article " pourquoi vous devriez vous soucier de falcorjs (netflix falcor)) ".
2) Relay/GraphQL ressemble plus à un énorme outil d’entreprise.
Par exemple, vous avez deux documentations distinctes qui parlent séparément:
a) Relais: https://facebook.github.io/relay/docs/tutorial.html - Conteneurs - Routes - Conteneur racine - Etat Prêt - Mutations - Couche réseau - Plugin Babel Relay - GRAPHQL
RÉFÉRENCE API
Relais
INTERFACES
RelayNetworkLayer
b) GrapQL: https://facebook.github.io/graphql/
C'est ton choix:
Simple et court documenté Falcor JS VERSUS Outil de taille entreprise avec une documentation longue et avancée en tant que GraphQL & Relay
Comme je l'ai déjà dit, si vous êtes un développeur front-end et que vous avez une idée de l'utilisation de JSON, l'implémentation de graphes JSON par l'équipe de Falcor est la meilleure façon de réaliser votre projet de développement complet.
En bref, Falcor ou GraphQL ou Restful résolvent le même problème - fournissent un outil pour interroger/manipuler les données efficacement.
La différence entre eux réside dans la manière dont ils présentent leurs données:
Chaque fois que nous avons besoin de fournir des données à l'utilisateur, nous obtenons quelque chose d'aimé: client -> requête -> {une requête de traduction de couche en opération de données} -> data.
Après avoir lutté avec GraphQL, Falcor et JSON API (et même ODdata), j'ai écrit ma propre couche de requête de données . C'est plus simple, plus facile à apprendre et plus équivalent avec GraphQL.
Vérifiez-le à:
https://github.com/giapnguyen74/nextql
Il s’intègre également à featherjs pour les requêtes/mutations en temps réel. https://github.com/giapnguyen74/nextql-feathers
OK, commencez simplement par une différence simple mais importante, GraphQL est une requête basée sur Falcor n'est pas!
Mais comment ils vous aident?
Fondamentalement, ils nous aident tous les deux à gérer et à interroger des données, mais GraphQL a un modèle req/res et renvoie les données sous la forme JSON , en gros, l'idée dans GraphQL est d'avoir une seule requête pour obtenir toutes vos données dans un seul objectif ... De plus, une réponse exacte en ayant une requête exacte, donc quelque chose à Si vous avez de nombreux utilisateurs mobiles ou pour certaines raisons, si vous souhaitez avoir moins de demandes et une réponse plus rapide, utilisez GraphQL .. Bien que Faclor ne soit pas trop éloigné de cela, alors poursuivez votre lecture ...
D'autre part, Falcor de Netflix, demande généralement (généralement plus d'une fois) de récupérer toutes vos données, même s'ils tentent de l'améliorer à un seul ... Falcor est plus limité pour les requêtes et n’a pas d’aides aux requêtes prédéfinies comme range et etc ...
Mais pour plus de précisions, voyons comment chacun d’entre eux se présente:
GraphQL, un langage de requête pour votre API
GraphQL est un langage de requête pour les API et un environnement d'exécution permettant de répondre à ces requêtes avec vos données existantes. GraphQL fournit une description complète et compréhensible des données de votre API, donne aux clients le pouvoir de demander exactement ce dont ils ont besoin et rien de plus, facilite l'évolution des API au fil du temps et permet l'utilisation d'outils puissants pour les développeurs.
Envoyez une requête GraphQL à votre API et obtenez exactement ce dont vous avez besoin, rien de plus, rien de moins. Les requêtes GraphQL renvoient toujours des résultats prévisibles. Les applications utilisant GraphQL sont rapides et stables car elles contrôlent les données qu'elles obtiennent, pas le serveur.
Les requêtes GraphQL accèdent non seulement aux propriétés d'une ressource, mais suivent également les références entre elles. Bien que les API typiques REST nécessitent le chargement à partir de plusieurs URL, les API GraphQL obtiennent toutes les données dont votre application a besoin en une seule requête. Les applications utilisant GraphQL peuvent être rapides, même sur des connexions de réseau mobile lentes.
Les API GraphQL sont organisées en termes de types et de champs, pas de points de terminaison. Accédez à toutes les fonctionnalités de vos données à partir d'un seul point de terminaison. GraphQL utilise des types pour s'assurer que les applications ne demandent que ce qui est possible et fournissent des erreurs claires et utiles. Les applications peuvent utiliser des types pour éviter d'écrire du code d'analyse manuelle.
Falcor, une bibliothèque JavaScript pour une récupération efficace des données
Falcor vous permet de représenter toutes vos sources de données distantes en tant que modèle à domaine unique via un graphique JSON virtuel. Vous codez de la même manière, où que se trouvent les données, que ce soit en mémoire sur le client ou sur le réseau sur le serveur.
Une syntaxe de chemin semblable à celle de JavaScript facilite l'accès à autant de données que vous le souhaitez, quand vous le souhaitez. Vous récupérez vos données en utilisant des opérations JavaScript familières telles que get, set et call. Si vous connaissez vos données, vous connaissez votre API.
Falcor parcourt automatiquement les références dans votre graphique et effectue les demandes nécessaires. Falcor gère de manière transparente toutes les communications réseau, le traitement opportun et le traitement en différé des demandes.