Devoxx 2015 : retour sur Firebase – Build Realtime Apps

En préparant ma venue au Devoxx 2015, j’ai remarqué le Tools-in-Action « Jeu de rôle en ligne massivement multijoueur avec Firebase », animé par Alexis Moussine-Pouchkine et Thomas Guerin, qui semblait prometteur. D’une part grâce à la technoJlogie abordé, Firebase, la start-up qui a été rachetée fin 2014 par Google pour consolider Google Cloud Platform, d’autre part par la promesse faite dans la description du Tools-in-Action de pouvoir créer un jeu multi-utilisateurs en seulement 30 minutes ! Les speakers ont présenté Firebase par le biais d’un jeu de prise de contrôle de gare qu’ils ont développé. Ce talk m’a donné un aperçu des capacités impressionnantes de Firebase : je vous propose de vous partager les recherches que j’ai effectuées afin de me rendre compte de la valeur ajoutée réelle de Firebase.

Firebase, c’est quoi ?

Firebase est une plateforme de développement d’applications en temps réel. Elle utilise un modèle BaaS (Back end as a Service). En d’autres termes, Firebase propose aux développeurs de ne coder que du code front-end et de laisser Firebase s’occuper du reste. Les données sont stockées en NoSQL sous la forme d’un fichier JSON au sein d’un SoftLayer d’IBM. Pour mieux comprendre, voici un exemple d’une BD Firebase : https://dinosaur-facts.firebaseio.com/.

Firebase s’appuie sur 3 piliers fondamentaux :

1. Une API pour manipuler, stocker et synchroniser les données en temps réel :

La synchronisation des données est tout simplement bluffante. Les modifications effectuées depuis un client ou dans la BD Firebase sont presque instantanément mises à jour. Ainsi, on comprend facilement le surnom de Firebase comme étant la « Dropbox des développeurs ». OK, mais que se passe-t-il si le client perd sa connexion Internet ? Firebase conserve une version locale des données actives. Quand une donnée est modifiée, elle est mise à jour en local puis envoyée aux serveurs Firebase. Par conséquent, les applications Firebase restent relativement fonctionnelles en mode offline et synchronisent les données dès la reconnexion (par elles-mêmes, donc pas de code à écrire).

Un autre point très intéressant de Firebase : des librairies officielles, qui sont pour la plupart des frameworks / librairies Javascript et des librairies natives pour iOS et Android :

  • AngularFire;
  • EmberFire;
  • ReactFire;
  • BackboneFire;
  • NodeJS;
  • iOS SDK;
  • Android SDK.

Et si votre plateforme n’est pas supportée, une API REST permet tout de même d’intégrer Firebase (de nombreuses librairies non officielles ont été créés par ce moyen et sont disponibles sur Git).

2. Un service d’authentification (sans toucher à une seule ligne de code côté back) :

Firebase fournit un service d’authentification clé en main. L’API nous offre 4 principaux modèles d’authentification :

  • Une authentification anonyme ;
  • Un couple d’email & password ;
  • Différents OAuth (Facebook, Twitter, GitHub, etc.) ;
  • Ou une authentification personnalisée via JSON Web Tokens.

Firebase utilise des callbacks pour renvoyer les informations de l’utilisateur et son UID. De plus, Firebase conserve un payload de la connexion contenant le couple : mode de connexion (anonyme, Facebook, etc) et UID de l’utilisateur.

3. Sécurité des données :

Le protocole SSL est utilisé par défaut pour transporter les informations, ainsi les ressources REST sont accessibles via HTTPS. Pour la gestion des droits de lecture/écriture, Firebase fournit des « règles de sécurité ». En synthétisant, ces règles correspondent à des mots clés à placer au sein de la structure JSON (donc du côté de la BD). Ils permettent de décrire et de limiter l’accès à nos données. Il existe quatre types de règles : read, write, validate et indexOn. Les deux premières servent à octroyer des droits de lecture et écriture aux données. La règle validate est utilisée comme une contrainte sur la donnée.

IndexOn permet d’accélérer la vitesse des requêtes en précisant les clés à indexer.
NB : les règles de type read and write appliquées à un nœud sont aussi appliquées à tous ses nœuds enfants. Ainsi, si un nœud parent a la permission read, tous ses noeuds enfants ont aussi obligatoirement cette même permission.

4. Pas de SQL : comment rechercher mes données ?

Les requêtes peuvent à elles seules constituer un article. De ce fait, nous n’allons voir qu’un aspect schématisé de cette notion, puis je vous proposerai quelques liens à visiter pour obtenir plus d’informations. Les données peuvent être recherchées selon leur emplacement dans l’arborescence JSON ou selon la priorité des nœuds JSON. Une priorité peut être un nombre ou string que l’on lie à un nœud du fichier JSON (par défaut les nœuds n’ont aucune priorité). Lors d’une requête sur les priorités, les règles suivantes s’appliquent :

  • Les nœuds sans priorités s’affichent en premier ;
  • Les priorités de type nombre s’affichent en deuxième ;
  • Les priorités de type string s’affichent en dernier ;
  • Quand deux nœuds ont la même priorité, les nœuds sont triés selon leurs noms.

Dans la plupart des cas, on utilise l’emplacement du nœud comme élément de recherche : il faut donc faire très attention à la structure du JSON stockée dans Firebase.

Pour plus d’informations :

Prêt pour l’aventure Firebase ?

Vous pouvez dès à présent vous lancez dans l’aventure Firebase en vous inscrivant ici. Vous pouvez consulter le pricing ici.

 

Share
Emilien MURATON
Emilien MURATON

3278

Comments

  1. Bonjour ! Article très intéressant. Quelques mots peut-être sur la concurrence et les alternatives du moment ? Est-ce la solution la plus en vogue ? La seule (très peu probable) ? Merci à vous.

  2. Emilien Muraton Emilien Muraton Says: May 4, 2015 at 10:48 am

    Bonjour, merci de votre retour. Vous posez une question très intéressante et à mon sens très ouverte. On trouve une immensité de solution BaaS sur le marché : Parse, Mobeelizer, Kumulos, Kinveyetc. Chacune de ces solutions possèdent des caractéristiques différentes et parfois même uniques. De ce fait, à mon avis, aucun leader ne se dégage réellement de ses concurrents.

  3. Merci pour la réponse rapide. En tout cas ça m’a donné envie envie de tester Firebase. Bonne journée !

Leave a Reply

Your email address will not be published. Required fields are marked *