Netflix a ouvert le code source de Falcor, une bibliothèque JavaScript offrant un modèle et un mécanisme asynchrone pour récupérer les données JSON à partir de sources multiples.
Netflix utilise Falcor pour peupler l'interface utilisateur de leur application Web avec des données JSON. Toutes les données back-end provenant d'un cache mémoire ou de plusieurs bases de données sont modélisées par un seul objet JSON virtuel. Il est appelé « virtuel » car du point de vue client, les données semblent être dans la mémoire, même si elles peuvent effectivement résider sur des bases de données locales ou distantes.
Les données sont mises à disposition à travers un graphe JSON, en utilisant l’interface DataSource ayant les opérations asynchrones suivantes : get
, set
et call
. Le client peut parcourir le graphe en utilisant des chemins similaires à JavaScript en accédant directement aux données JSON. A des fins de démonstration, nous allons examiner cet objet JSON minimal :
{ "greeting": "Hello World" }
Si cet objet est stocké dans le fichier "model.json", y accéder se traduit comme suit :
<script src="https://netflix.github.io/falcor/build/falcor.browser.js"></script> <script> var model = new falcor.Model({source: new falcor.HttpDataSource('/model.json') }); // retrieve the "greeting" key from the root of the Virtual JSON resource model. get("greeting"). then(function(response) { document.write(response.json.greeting); }); </script>
Falcor comprend un routeur qui cache les entrepôts de données actuelles et qui dirige les appels vers les services back-end responsables et appropriés pour récupérer les données. Aussi, lorsque les données sont récupérées, elles sont mises en cache pour éviter les allers-retours à la base de données. Falcor peut également faire des traitements par lots, avec un seul appel sur le réseau, et ne délivre pas de demandes de base de données en double s’il en existe déjà une dans le processus.
Netflix a mis a disposition Falcor sur GitHub, et demande le support de la communauté pour trouver et corriger les bugs ainsi que l'intégration avec les différents frameworks MVC.