Firebase - Les bases de données Firestore 101

Par qtang, 13 mars, 2025
Logo de Firebase

Qu'est-ce que Cloud Firestore?

Vous vous souvenez quand on comparait les bases de données à un garde-manger? Moi non plus, mais aujourd’hui on va explorer Cloud Firestore, un outil de Firebase facile à utiliser qui permet de stocker efficacement des données dans une application. Idéal quand on veut aller vite tout en restant fiable. Firestore est une base de données cloud NoSQL qui offre un stockage flexible des données sous forme de collections et documents. Son grand avantage? La synchronisation en temps réel et une scalabilité impressionnante.

Les principaux avantages:

  • Temps réel: synchronise les données instantanément entre les utilisateurs.
  • Facilité d'utilisation: intégration rapide et intuitive.
  • Structure souple: s’adapte facilement à différents modèles de données.
  • Scalabilité: gère facilement la montée en charge.

Installation et configuration

1. Créer un projet Firebase

  • Accédez à Firebase Console.
  • Créez un nouveau projet et suivez les étapes pour connecter votre application (web, Android, iOS).

2. Installer Firebase SDK

npm install firebase

3. Initialisation de Firestore

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

const firebaseConfig = {
  apiKey: "VOTRE_API_KEY",
  authDomain: "VOTRE_PROJET.firebaseapp.com",
  projectId: "VOTRE_PROJET",
  storageBucket: "VOTRE_PROJET.appspot.com",
  messagingSenderId: "VOTRE_SENDER_ID",
  appId: "VOTRE_APP_ID"
};

const app = initializeApp(firebaseConfig);
const db = getFirestore(app);

Utilisation simple

Ajouter un utilisateur

import { collection, addDoc } from "firebase/firestore";

const ajouterUtilisateur = async () => {
    try {
        const docRef = await addDoc(collection(db, "utilisateurs"), {
            username: "qtang",
            password: "admin"
        });
        console.log("Document ajouté avec ID :", docRef.id);
    } catch (error) {
        console.error("Erreur d’ajout :", error);
    }
};

Lire les données

import { collection, getDocs } from "firebase/firestore";

const lireUtilisateurs = async () => {
    const querySnapshot = await getDocs(collection(db, "utilisateurs"));
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${JSON.stringify(doc.data())}`);
    });
};

Modifier un utilisateur

import { doc, updateDoc } from "firebase/firestore";

const modifierUtilisateur = async (idDoc) => {
    const refDoc = doc(db, "utilisateurs", idDoc);
    await updateDoc(refDoc, {
        password: "nouveauMotDePasse"
    });
    console.log("Utilisateur modifié avec succès !");
};

Supprimer un utilisateur

import { doc, deleteDoc } from "firebase/firestore";

const supprimerUtilisateur = async (idDoc) => {
    await deleteDoc(doc(db, "utilisateurs", idDoc));
    console.log("Utilisateur supprimé avec succès.");
};

Sécuriser l'accès avec les Firestore Rules

Lorsqu'on gère des données sensibles, la sécurité devient un aspect essentiel. Firebase Firestore offre un système de règles de sécurité qui permet de définir qui peut accéder à quelles données et sous quelles conditions. Cela vous permet de protéger vos informations et de garantir que seules les personnes autorisées peuvent interagir avec certaines parties de votre base de données.

Qu'est-ce que les Rules (Règles) de Firestore?

Les règles de sécurité Firestore sont des règles personnalisées que vous pouvez définir pour contrôler l'accès aux données de votre base Firestore. Ces règles peuvent être basées sur des conditions comme l'authentification de l'utilisateur, ses rôles, ou encore des informations spécifiques liées aux documents dans la base de données. Cela vous permet de gérer l'accès en lecture, écriture, ou modification de manière fine et sécurisée.

Voici un exemple de règle de sécurité très simple:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Cette règle interdit l'accès en lecture et en écriture à toutes les collections et documents de la base de données. C'est une règle de base pour empêcher l'accès non autorisé avant de définir des conditions plus précises.

Configurer des Règles Personnalisées

Les règles peuvent être définies pour permettre un accès conditionnel, par exemple:

  • Accès basé sur l'authentification: Autoriser uniquement les utilisateurs connectés à lire ou écrire des données.
  • Accès en fonction des données: Par exemple, un utilisateur ne peut modifier que ses propres documents.
  • Règles de rôle: Autoriser certaines actions uniquement à des utilisateurs avec des rôles spécifiques (administrateur, utilisateur, etc.).

Voici un exemple de règles plus spécifiques:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    // Accès aux documents d'un utilisateur authentifié
    match /utilisateurs/{userId} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
    // Accès en lecture uniquement aux documents publics
    match /public/{documentId} {
      allow read: if true;
      allow write: if false;
    }
  }
}

Dans cet exemple:

  • Un utilisateur peut lire et écrire dans son propre document utilisateurs/{userId} seulement s'il est connecté et que l'ID de l'utilisateur correspond à celui du document.
  • Les documents dans la collection public peuvent être lus par tout le monde, mais personne ne peut y écrire.

Pourquoi les règles de sécurité sont importantes ?

Les règles de sécurité sont cruciales pour plusieurs raisons:

  • Protection des données sensibles: Elles permettent de garantir que seules les personnes autorisées peuvent accéder à ou modifier des données sensibles.
  • Prévention des attaques: Elles aident à éviter des accès non autorisés qui pourraient compromettre la sécurité de votre application.
  • Gestion de l'accès granulaire: Elles permettent de définir des conditions complexes d'accès, offrant une flexibilité maximale pour gérer l'accès aux données.

Tester et déployer vos Règles

Une fois que vous avez défini vos règles, il est essentiel de les tester pour vous assurer qu'elles fonctionnent comme prévu. Vous pouvez tester vos règles en utilisant la console Firebase ou via des outils comme Firebase Emulator Suite.


Gestion des coûts

Vu qu'on travaille désormais avec des transferts et du stockage de données, qui peuvent être robustes et nécessiter une infrastructure scalable, il est important de prendre en compte les coûts associés à ces services. En effet, bien que Firebase Firestore offre une solution flexible et performante, l'utilisation continue et croissante des ressources peut engendrer des frais. Cependant, grâce aux outils fournis par Firebase, vous avez la possibilité de suivre votre consommation en temps réel et de gérer vos dépenses de manière proactive.

Cela vous permet non seulement de mieux comprendre comment vous utilisez les services, mais aussi de prendre des décisions éclairées pour optimiser vos coûts sans sacrifier les performances. Voici comment vous pouvez suivre votre usage et vos coûts grâce à l'interface Firebase.

Suivi de l'usage et des coûts

Voici une vue de la page des statistiques, où vous pouvez suivre l'usage de vos services et voir combien cela vous coûte. Cette fonctionnalité est cruciale pour surveiller votre utilisation en temps réel et éviter toute surprise sur la facture. Vous pouvez voir directement le pourcentage d'usage ainsi que le coût généré, ce qui vous permet de prendre des décisions éclairées.

L’interface simple vous permet de voir rapidement l’utilisation et les coûts.

Avec ces informations à portée de main, il est beaucoup plus facile d’optimiser l’utilisation des services et de rester dans les limites que vous vous êtes fixées.


Gestion de budget

Si vous souhaitez aller plus loin dans la gestion de vos coûts, la page de budget est l'outil parfait. Ici, vous pouvez définir un montant maximal de frais, ce qui vous permettra de garder le contrôle de votre budget sans dépasser ce que vous êtes prêt à dépenser.

Le budget est facilement modifiable pour ajuster les limites selon vos besoins.

C'est une excellente fonctionnalité si vous préférez éviter d'opter pour un package plus cher. En fixant un budget, vous avez la garantie que vos dépenses ne dépasseront pas le seuil que vous avez défini. Si vous constatez que vous atteignez ce montant trop rapidement, vous pourrez ajuster votre usage ou reconsidérer vos choix avant de passer à une option plus coûteuse.


En résumé, ces outils vous offrent une vue complète de votre consommation et vous aident à mieux gérer votre budget, tout en vous permettant de prendre des décisions basées sur des données concrètes et actuelles.


Difficulté technique

Fonctionnalité Niveau de difficulté
Création projet et configuration Firebase 3 - Facile grâce à l’interface
Installation Firebase SDK 2 - Enfantin, ne requiert que la connaissance bash npm
Ajouter des données 5 - Modérée, demande une compréhension des promesses
Lire des données 5 - Modérée, nécessite lecture docs Firebase
Modifier des données 6 - Compréhension des refs/documents nécessaire
Supprimer des données 4 - Simple avec doc et deleteDoc

Bilan rapide

Résumé global de la difficulté

  • Difficulté moyenne: < 3.5/10
  • Accessibilité pour un non-programmeur: Facile
  • Aspect le plus facile: Création du projet, configuration initiale.
  • Aspect le plus complexe: Modifier des données existantes (requiert compréhension des références Firebase).

Conclusion

Cloud Firestore de Firebase simplifie énormément le stockage et la manipulation des données, non seulement pour les développeurs débutants et intermédiaires, mais aussi pour ceux qui n'ont pas une expertise technique approfondie. Grâce à son interface intuitive et à sa facilité d'intégration, Firestore permet de gérer des données de manière fluide et performante, sans nécessiter de connaissances complexes en gestion de bases de données.

Pour les non-développeurs, l’utilisation de Firestore représente une solution clé en main pour stocker et organiser des informations tout en assurant une synchronisation en temps réel. L’interface utilisateur est conçue de manière à rendre l’expérience aussi simple que possible, ce qui vous permet de vous concentrer sur l’essentiel: vos données. De plus, la scalabilité intégrée de Firestore garantit que l’application puisse grandir avec vos besoins sans que vous ayez à vous soucier de l’infrastructure sous-jacente.

Si vous souhaitez ajouter une couche de sécurité supplémentaire, par exemple en contrôlant l'accès aux données à l'aide de règles de sécurité personnalisées, il est important de noter que cela peut augmenter la complexité. En fonction des restrictions et des conditions que vous souhaitez imposer, la configuration des règles peut demander une compréhension plus approfondie des besoins de votre application et de la manière dont vous voulez gérer l'accès aux données. Cependant, cette personnalisation vous permet de garantir la sécurité et l'intégrité de vos données, tout en offrant une flexibilité maximale.

En résumé, que vous soyez développeur ou non, Firestore est une solution efficace, accessible et flexible pour gérer vos données, tout en offrant une facilité d’utilisation impressionnante. Avec cette base de données, vous pouvez gérer votre contenu, vos utilisateurs et vos ressources de manière simple et sécurisée.

Semaine prochaine, on explore Firebase Realtime Database, une base de données NoSQL qui permet de stocker et de synchroniser des données en temps réel entre les clients.


Sources utiles


Références

Google. (s.d.). Firebase Firestore. Firestore. https://firebase.google.com/docs/firestore (Consulté le 2 mars 2025)

@Firebase. (2021, 27 septembre). Getting started with Cloud Firestore for the web [Vidéo]. YouTube. https://www.youtube.com/watch?v=BjtxPj6jRM8 (Consulté le 6 mars 2025)

freeCodeCamp. (2022, 1er avril). Firebase Firestore Crash Course. freeCodeCamp. https://www.freecodecamp.org/news/firebase-firestore-crash-course/ (Consulté le 10 mars 2025)

Commentaires1

alouragli

il y a 2 semaines 5 jours

— Salut Bao, merci ! Je viens de découvrir Cloud Firestore, qui possède ses propres règles de sécurité. C'est cool ! En plus, il est scalable, flexible et synchronisé en temps réel. J'avoue que c'est une base de données NoSQL, mais moi, je préfère les bases de données MySQL, car elles utilisent des tables relationnelles. D’ailleurs, le choix entre une base de données SQL ou NoSQL dépend des besoins. Donc, si je comprends bien, c’est une base de données en ligne accessible à tous les utilisateurs autorisés, puisqu’elle est hébergée dans le cloud ? En bref, toute une équipe peut travailler sur la même base de données, c’est bien ça ?