Découverte de Firebase – épisode 2 : les fonctionnalités phares
Dans notre dernier article, nous avions évoqué l’histoire de Firebase et la puissance de la plateforme. Si cette mise en bouche vous a plu, il est temps de vous en dévoiler un peu plus sur les services proposés et notamment ceux qui, pour nous, sont des incontournables. Il existe de nombreux services tout aussi intéressants les uns que les autres, mais quatre de ces derniers s’imposent comme des must-have lorsque vous travaillez avec Firebase : Cloud Firestore, Firebase Realtime, Firebase Authentication et Firebase Fonctions.
Cloud Firestore, la synchronisation à l’échelle mondiale
Cloud Firestore est une base de données NoSQL permettant de gérer facilement les données de vos applications à l’échelle mondiale. Grâce à ce service, vous pouvez structurer rapidement et facilement vos données selon vos besoins, en générant des collections, des sous-collections et des documents en quelques lignes de code. Créer une hiérarchie lisible devient un jeu d’enfant, et le système de requêtage classique est plutôt bien pensé. Chaque requête à la base de données s’adapte à la taille de vos résultats, et non à la taille de votre ensemble de données. Cela permet d’obtenir les mêmes performances en récupérant 1 résultat dans un groupe de 10, de 100 ou de 100 000 000 données. Pas mal, non ? Petit bémol : Firebase patauge quelque peu pour gérer les requêtes complexes. La base de données reposant sur un fichier JSON, vous ne pouvez pas interroger plus d’une clé à la fois.
Les SDK iOS, Android et Web de Cloud Firestore proposent un accès hors ligne aux données. Lorsque les utilisateurs se déconnectent de votre application, les SDK stockent les données dans le cache local de l’appareil utilisé. Lorsque l’appareil est de nouveau en ligne, les données locales sont automatiquement synchronisées. Cela signifie que votre application fonctionne correctement même lorsque vos utilisateurs viennent du fin fond de la Creuse. Une optimisation plutôt sympathique. Grâce à quelques lignes de code très simples, vous pouvez également générer une écoute sur les collections de votre base de données, ce qui peut être très pratique pour récupérer des données instantanément.
Côté sécurisation des datas, la base de données s’associe à Firebase Authentication (on en parle juste après, soyez patients) pour garantir une sécurité supplémentaire et fournir une authentification simple et intuitive. Firebase fournit un lot de règles de sécurité performant, afin que vous puissiez contrôler l’accès à vos données en toute sérénité. Les règles de sécurité contrôlent les rôles et les droits de chaque utilisateur, tout en permettant d’appliquer une logique de validation complexe aux jeux de données. Le choix est le vôtre : utiliser le modèle de sécurité déclarative de Firebase Authentication pour gérer des accès basés sur l’identité de l’utilisateur, ou miser sur les correspondances de modèles de vos données.
Propulsé par le système de stockage de Google, Cloud Firestore s’adapte à vos besoins pour que vous puissiez vous concentrer sur la création de votre application sans avoir à vous soucier de la sécurité et de la performance. Mais qu’est-ce qui est mieux qu’une base de données ? Une base de données en temps réel, bien sûr !
Firebase Realtime, la base de données en temps réel
La gestion des données est un casse-tête. Il faut tenir compte des évolutions de votre application, gérer les problèmes de connectivité et on en passe. Stocker et synchroniser des données en quelques millisecondes et partout dans le monde, voilà ce que propose Firebase Realtime. Tout comme Cloud Firestore, cette base de données NoSQL hébergée dans le Cloud permet d’accéder facilement et rapidement à vos données, depuis n’importe quel appareil, n’importe où. A noter cependant : l’instantané, c’est bien, mais il ne faut pas en abuser. Si votre projet ne nécessite pas de synchronisation en temps réel, les lectures uniques de la base de données suffisent amplement.
Au lieu d’effectuer des requêtes HTTP classiques, Firebase Realtime mise son fonctionnement sur la synchronisation : chaque fois que les données évoluent, tout appareil connecté reçoit l’information en une fraction de seconde. L’API de la base de données en temps réel est conçue pour se limiter aux opérations pouvant être exécutées rapidement, ce qui permet de profiter d’une expérience en temps réel sans compromettre la réactivité. Cette logique peut s’avérer contraignante : lors de la mise en place de votre projet, il est nécessaire de réfléchir à la façon dont les utilisateurs accèdent aux données pour les structurer en conséquence.
Pour ce qui est de la sécurisation et de l’authentification, Firebase Realtime repose également sur Firebase Authentication et sur un ensemble de règles de sécurité, une combinaison qui a déjà fait ses preuves avec Cloud Firestore. La sécurité et la validation des données sont gérées grâce aux règles de sécurité basées sur des expressions appelées Firebase Realtime Database Security Rules, qui sont exécutées à chaque lecture ou écriture de data.
La base de données Firebase Realtime permet un développement d’applications plus simple et plus rapide. Elle a été adoptée par bon nombre de développeurs, qui invitent le service à repousser ses limites en l’utilisant pour des opérations de plus en plus complexes et volumineuses.
Firebase Authentication, la connexion multi-plateforme comme on aime
La plupart des applications sur le marché nécessitent une authentification de la part de ses utilisateurs. La mise en place d’un système d’authentification peut prendre un temps de développement considérable, et nécessite une maintenance constante du système. Grâce à Firebase Authentication, environ 10 lignes de code sont nécessaires pour mettre en place votre configuration, même en traitant des cas complexes comme le multi-compte.
Firebase Authentication permet d’enregistrer les données d’authentification dans le Cloud et de fournir une expérience similaire sur l’ensemble des appareils de l’utilisateur. Le champ des possibilités est large : connexion classique par email/mot de passe, numéro de téléphone, comptes Google, Facebook, Twitter ou encore GitHub. De plus, il est possible de connecter des utilisateurs à votre application Firebase en utilisant Firebase comme solution d’authentification complète ou bien d’utiliser le SDK d’authentification pour intégrer manuellement vos propres méthodes de connexion.
Firebase met en œuvre les meilleures pratiques pour l’authentification web et mobile. Il gère également les cas extrêmes tels que la récupération de compte et la liaison de comptes, opérations relativement sensibles niveau sécurité. L’envoi d’e-mails de réinitialisation de mot de passe ou de validation est également disponible, ce qui s’avère très utile pour les applications comportant un espace membre.
Cloud Functions, le backend simplissime
Cloud Functions est un environnement Node.js sécurisé et évolutif, dans lequel vous pouvez exécuter des fonctions JavaScript ou TypeScript. Votre code est stocké dans le Cloud et s’exécute dans un environnement personnalisé. Le SDK de Cloud Functions répond aux événements générés par les fonctionnalités Firebase. Les fonctions agissent comme des blocs Lego à plugger à n’importe quel service Firebase. Par exemple, une fonction peut être déclenchée lorsqu’une image est téléchargée sur Firebase Storage, ou pour la création des utilisateurs avec Firebase Authentication. Elles sont également réactives aux modifications de données en base et peuvent servir à nettoyer automatiquement certaines données utilisateur lorsqu’un document est supprimé. Pour résumer, presque tout ce qui se passe dans l’univers Firebase peut déclencher une fonction.
Le déploiement de votre code sur les serveurs ne nécessite qu’une seule commande, et ça c’est beau :
En vérité, vous pouvez étoffer cette commande en précisant le projet Firebase concerné, ou bien sélectionner des fonctions spécifiques à déployer. Mais la base est là.
Une fois le déploiement effectué, la magie opère : Google s’occupe de votre fonction en modulant le nombre de serveurs virtuels nécessaires pour le traitement. Chaque fois qu’une fonction est déclenchée, un nouveau serveur apparaît, traite la demande et retourne dans les limbes. La magie de Google Cloud gère automatiquement vos fonctions et votre infrastructure en fonction de la charge de travail. Le temps d’exécution peut cependant varier: une simple fonction peut prendre une milliseconde, comme en prendre une centaine. Cette différence s’explique par les heures de démarrage du serveur virtuel. Si le serveur choisi pour exécuter votre fonction est déjà réveillé, la fonction se déclenche instantanément. Mais si ce n’est pas le cas et qu’il faut invoquer un serveur, ce dernier aura besoin d’un peu de temps pour se mettre à fonctionner. Vous n’êtes pas à 100% opérationnel en sortant du lit, n’est-ce pas ? C’est le même principe. Dans le jargon technique, on parle de démarrages à chaud ou à froid. Malheureusement, ces fameux démarrages à froid sont inéluctables. Vous devrez en tenir compte lors de l’utilisation des fonctions Cloud.
Chaque fonction s’exécute indépendamment des autres, dans un environnement dédié. Vous pouvez exécuter vos fonctions via une requête HTTP/HTTPS directe avec GET, POST, etc… Ou grâce à un système d’écoute des événements. Les fonctions cloud sont également parfaites pour effectuer des tâches CRON à faible trafic, ce qui est utile pour effectuer des vérifications de data chaque mercredi à 3 heures du matin.
Déployer ses fonctions c’est bien, mais il est tout de même judicieux de tester son travail avant de l’envoyer dans l’espace. Il existe deux façons de tester les fonctions : hors ligne et en ligne, selon vos préférences. En effectuant des tests hors ligne, vous pouvez compter sur un environnement virtuel pour simuler les arguments de vos fonctions. Avec les tests en ligne, vous effectuez de vraies requêtes à Firebase en utilisant un projet de développement dédié, les données sont lues et écrites.
Cloud Functions adapte automatiquement les ressources à l’utilisation de votre application. Pas besoin de vous inquiéter des informations d’identification SSH ou de la gestion des serveurs, tout est fait pour vous. Cloud Functions est entièrement isolé de la partie client, ce qui garantit des fonctions sécurisées et aux risques de rétro-conception limités.
Pour conclure,
Ces quatre services forment le cœur de Firebase, les éléments indispensables pour mener à bien votre projet. Chaque service proposé par la plateforme peut fonctionner indépendamment des autres, mais nous vous conseillons vivement d’utiliser au maximum la sphère Firebase pour optimiser votre application et simplifier votre développement. Nous avons mis en lumière les éléments principaux de l’univers Firebase, mais il reste encore énormément de choses à tester et à découvrir. Dans un prochain article, nous vous présenterons d’autres services qui valent largement le coup d’œil et qui, nous en sommes convaincus, sauront gagner vos faveurs.
Vous pouvez retrouver notre premier article ici :