Premiers pas avec l'édition Standard de Cloud Firestore à l'aide des bibliothèques clientes serveur

Ce guide de démarrage rapide vous explique comment configurer l'édition Enterprise de Cloud Firestore, ajouter des données, puis afficher les données que vous venez d'ajouter dans la console Firebase à l'aide des bibliothèques clientes du serveur pour C#, Go, Java, Node.js, PHP, Python et Ruby.

Utilisez ces bibliothèques clientes pour configurer des environnements serveur privilégiés avec un accès complet à votre base de données.

Créer une base de données Cloud Firestore

  1. Si vous ne l'avez pas encore fait, créez un projet Firebase : dans la console Firebase, cliquez sur Ajouter un projet, puis suivez les instructions à l'écran pour créer un projet Firebase ou ajouter des services Firebase à un projet Google Cloud existant.

  2. Ouvrez votre projet dans la console Firebase. Dans le panneau de gauche, développez Créer, puis sélectionnez Base de données Firestore.

  3. Cliquez sur Créer une base de données.

  4. Sélectionnez un emplacement pour la base de données.

    Si vous ne parvenez pas à sélectionner un emplacement, c'est que l'emplacement des ressources Google Cloud par défaut de votre projet a déjà été défini. Certaines ressources de votre projet (comme l'instance Cloud Firestore par défaut) partagent une dépendance de localisation commune. Leur emplacement peut être défini lors de la création du projet ou lors de la configuration d'un autre service qui partage cette dépendance de localisation.

  5. Sélectionnez un mode de départ pour votre Cloud Firestore Security Rules :

    Mode test

    Convient pour se familiariser avec les bibliothèques clientes mobiles et Web, mais permet à tout le monde de lire et d'écraser les données. Lorsque vous aurez terminé les tests, passez en revue la section Sécuriser les données.

    Pour commencer à utiliser le SDK Web, Apple Platforms ou Android, sélectionnez le mode test.

    Mode production

    Refuse tous les accès en lecture et en écriture des clients mobiles et Web. Vos serveurs d'application authentifiés (C#, Go, Java, Node.js, PHP, Python ou Ruby) peuvent toujours accéder à votre base de données.

    Pour commencer à utiliser la bibliothèque cliente du serveur C#, Go, Java, Node.js, PHP, Python ou Ruby, sélectionnez le mode production.

    Votre ensemble initial de Cloud Firestore Security Rules s'appliquera à votre base de données Cloud Firestore par défaut. Si vous créez plusieurs bases de données pour votre projet, vous pouvez déployer Cloud Firestore Security Rules pour chacune d'elles.

  6. Cliquez sur Créer.

Lorsque vous activez Cloud Firestore, cela active également l'API dans Cloud API Manager.

Configurer l'environnement de développement

Ajoutez les dépendances et les bibliothèques clientes requises pour votre application.

Java
  1. Ajoutez le SDK Admin Firebase à votre application :
    • Avec Gradle :
      implementation 'com.google.firebase:firebase-admin:9.7.1'
    • Avec Maven :
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>9.7.1</version>
      </dependency>
           
  2. Suivez les instructions ci-dessous pour initialiser Cloud Firestore avec les identifiants appropriés dans votre environnement.
Python
  1. Ajoutez le SDK Admin Firebase à votre application Python :
    pip install --upgrade firebase-admin
  2. Suivez les instructions ci-dessous pour initialiser Cloud Firestore avec les identifiants appropriés dans votre environnement.
Node.js
  1. Ajoutez le SDK Admin Firebase à votre application :
    npm install firebase-admin --save
  2. Suivez les instructions ci-dessous pour initialiser Cloud Firestore avec les identifiants appropriés dans votre environnement.
Accéder
  1. Ajoutez le SDK Admin Firebase à votre application Go :
    go get firebase.google.com/go
  2. Suivez les instructions ci-dessous pour initialiser Cloud Firestore avec les identifiants appropriés dans votre environnement.
PHP
  1. Les bibliothèques clientes de serveur Cloud Firestore (Java, Node.js, Python, Go, PHP, C# et Ruby) utilisent les identifiants par défaut de l'application Google pour l'authentification.
    • Pour vous authentifier depuis votre environnement de développement, définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS de façon à ce qu'elle pointe vers un fichier de clé de compte de service JSON. Vous pouvez créer un fichier de clés sur la page Identifiants de la console API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Dans votre environnement de production, vous n'avez pas besoin de vous authentifier si vous exécutez votre application sur App Engine ou Compute Engine, en utilisant le même projet que celui utilisé pour Cloud Firestore. Sinon, configurez un compte de service.
  2. Installez et activez l'extension gRPC pour PHP. Vous en aurez besoin pour utiliser la bibliothèque cliente.
  3. Ajoutez la bibliothèque PHP Cloud Firestore à votre application :
    composer require google/cloud-firestore
Ruby
  1. Les bibliothèques clientes de serveur Cloud Firestore (Java, Node.js, Python, Go, PHP, C# et Ruby) utilisent les identifiants par défaut de l'application Google pour l'authentification.
    • Pour vous authentifier depuis votre environnement de développement, définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS de façon à ce qu'elle pointe vers un fichier de clé de compte de service JSON. Vous pouvez créer un fichier de clés sur la page Identifiants de la console API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Dans votre environnement de production, vous n'avez pas besoin de vous authentifier si vous exécutez votre application sur App Engine ou Compute Engine, en utilisant le même projet que celui utilisé pour Cloud Firestore. Sinon, configurez un compte de service.
  2. Ajoutez la bibliothèque Ruby Cloud Firestore à votre application dans le Gemfile :
    gem "google-cloud-firestore"
  3. Installez les dépendances du Gemfile avec la commande :
    bundle install

(Facultatif) Prototyper et tester avec Firebase Local Emulator Suite

Avant de parler de la façon dont votre application écrit et lit des données dans Cloud Firestore, nous allons présenter aux développeurs mobiles un ensemble d'outils qu'ils peuvent utiliser pour prototyper et tester les fonctionnalités de Cloud Firestore : Firebase Local Emulator Suite. Si vous testez différents modèles de données, optimisez vos règles de sécurité ou cherchez le moyen le plus économique d'interagir avec le backend, il peut être judicieux de pouvoir travailler en local sans déployer de services en direct.

Un émulateur Cloud Firestore fait partie de la Local Emulator Suite, qui permet à votre application d'interagir avec le contenu et la configuration de votre base de données émulée, ainsi qu'éventuellement avec les ressources de votre projet émulé (fonctions, autres bases de données et règles de sécurité).

L'utilisation de l'émulateur Cloud Firestore ne nécessite que quelques étapes :

  1. Ajoutez une ligne de code à la configuration de test de votre application pour vous connecter à l'émulateur.
  2. À partir de la racine du répertoire de votre projet local, exécutez firebase emulators:start.
  3. Effectuer des appels à partir du code prototype de votre application à l'aide d'un SDK de plate-forme Cloud Firestore comme d'habitude.

Un tutoriel détaillé sur Cloud Firestore et Cloud Functions est disponible. Nous vous conseillons également de consulter l'introduction à Local Emulator Suite.

Initialiser Cloud Firestore

Initialisez une instance de Cloud Firestore :

Java
L'initialisation du SDK Cloud Firestore varie en fonction de votre environnement. Vous trouverez ci-dessous les méthodes les plus courantes. Pour obtenir une référence complète, consultez Initialiser le SDK Admin.
  • Initialiser sur Google Cloud
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use the application default credentials
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .setProjectId(projectId)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • Initialiser sur votre propre serveur

    Pour utiliser le SDK Admin Firebase sur votre propre serveur, utilisez un compte de service.

    Dans la console Google Cloud, accédez à IAM et administration > Comptes de service. Générez une clé privée et enregistrez le fichier JSON. Utilisez ensuite le fichier pour initialiser le SDK :

    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use a service account
    InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • Python
    L'initialisation du SDK Cloud Firestore varie en fonction de votre environnement. Vous trouverez ci-dessous les méthodes les plus courantes. Pour obtenir une référence complète, consultez Initialiser le SDK Admin.
  • Initialiser sur Google Cloud
    import firebase_admin
    from firebase_admin import firestore
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore.client()

    Vous pouvez également utiliser un identifiant par défaut d'application existant pour initialiser le SDK.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore.client()
  • Initialiser sur votre propre serveur

    Pour utiliser le SDK Admin Firebase sur votre propre serveur, utilisez un compte de service.

    Dans la console Google Cloud, accédez à IAM et administration > Comptes de service. Générez une clé privée et enregistrez le fichier JSON. Utilisez ensuite le fichier pour initialiser le SDK :

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore.client()
  • Python

    L'initialisation du SDK Cloud Firestore varie en fonction de votre environnement. Vous trouverez ci-dessous les méthodes les plus courantes. Pour obtenir une référence complète, consultez Initialiser le SDK Admin.
  • Initialiser sur Google Cloud
    import firebase_admin
    from firebase_admin import firestore_async
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore_async.client()

    Vous pouvez également utiliser un identifiant par défaut d'application existant pour initialiser le SDK.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore_async
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore_async.client()
  • Initialiser sur votre propre serveur

    Pour utiliser le SDK Admin Firebase sur votre propre serveur, utilisez un compte de service.

    Dans la console Google Cloud, accédez à IAM et administration > Comptes de service. Générez une clé privée et enregistrez le fichier JSON. Utilisez ensuite le fichier pour initialiser le SDK :

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore_async
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore_async.client()
  • Node.js
    L'initialisation du SDK Cloud Firestore varie en fonction de votre environnement. Vous trouverez ci-dessous les méthodes les plus courantes. Pour obtenir une référence complète, consultez Initialiser le SDK Admin.
    • Initialiser sur Cloud Functions
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Initialiser sur Google Cloud
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp({
        credential: applicationDefault()
      });
      
      const db = getFirestore();
    • Initialiser sur votre propre serveur

      Pour utiliser le SDK Firebase Admin sur votre propre serveur (ou dans tout autre environnement Node.js), utilisez un compte de service. Dans la console Google Cloud, accédez à IAM et administration > Comptes de service. Générez une clé privée et enregistrez le fichier JSON. Utilisez ensuite le fichier pour initialiser le SDK :

      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      initializeApp({
        credential: cert(serviceAccount)
      });
      
      const db = getFirestore();
      
    Accéder
    L'initialisation du SDK Cloud Firestore varie en fonction de votre environnement. Vous trouverez ci-dessous les méthodes les plus courantes. Pour obtenir une référence complète, consultez Initialiser le SDK Admin.
  • Initialiser sur Google Cloud
    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use the application default credentials
    ctx := context.Background()
    conf := &firebase.Config{ProjectID: projectID}
    app, err := firebase.NewApp(ctx, conf)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
  • Initialiser sur votre propre serveur

    Pour utiliser le SDK Admin Firebase sur votre propre serveur, utilisez un compte de service.

    Dans la console Google Cloud, accédez à IAM et administration > Comptes de service. Générez une clé privée et enregistrez le fichier JSON. Utilisez ensuite le fichier pour initialiser le SDK :

    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use a service account
    ctx := context.Background()
    sa := option.WithCredentialsFile("path/to/serviceAccount.json")
    app, err := firebase.NewApp(ctx, nil, sa)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
  • PHP

    PHP

    Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.

    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     */
    function setup_client_create(string $projectId = null)
    {
        // Create the Cloud Firestore client
        if (empty($projectId)) {
            // The `projectId` parameter is optional and represents which project the
            // client will act on behalf of. If not supplied, the client falls back to
            // the default project inferred from the environment.
            $db = new FirestoreClient();
            printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
        } else {
            $db = new FirestoreClient([
                'projectId' => $projectId,
            ]);
            printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);
        }
    }
    C#

    C#

    Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.

    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Ruby
    require "google/cloud/firestore"
    
    # The `project_id` parameter is optional and represents which project the
    # client will act on behalf of. If not supplied, the client falls back to the
    # default project inferred from the environment.
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

    Ajouter des données

    Cloud Firestore stocke les données dans des documents, qui sont eux-mêmes stockés dans des collections. Cloud Firestore crée implicitement les collections et les documents nécessaires la première fois qu'une donnée est ajoutée à un document. Vous n'avez pas besoin de créer explicitement les collections ni les documents.

    Créez une collection et un document à l'aide de l'exemple de code ci-dessous.

    Java
    DocumentReference docRef = db.collection("users").document("alovelace");
    // Add document data  with id "alovelace" using a hashmap
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Ada");
    data.put("last", "Lovelace");
    data.put("born", 1815);
    //asynchronously write data
    ApiFuture<WriteResult> result = docRef.set(data);
    // ...
    // result.get() blocks on response
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection("users").document("alovelace")
    doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})

    Python

    doc_ref = db.collection("users").document("alovelace")
    await doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Go
    _, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
    	"first": "Ada",
    	"last":  "Lovelace",
    	"born":  1815,
    })
    if err != nil {
    	log.Fatalf("Failed adding alovelace: %v", err)
    }
    PHP

    PHP

    Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.

    $docRef = $db->collection('samples/php/users')->document('alovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    C#
    DocumentReference docRef = db.Collection("users").Document("alovelace");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Ada" },
        { "Last", "Lovelace" },
        { "Born", 1815 }
    };
    await docRef.SetAsync(user);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/alovelace"
    
    doc_ref.set(
      {
        first: "Ada",
        last:  "Lovelace",
        born:  1815
      }
    )
    
    puts "Added data to the alovelace document in the users collection."

    À présent, ajoutez un autre document à la collection users. Notez que ce document contient une paire clé-valeur (deuxième prénom) qui n'est pas présente dans le premier document. Les documents d'une collection peuvent contenir différents ensembles d'informations.

    Java
    DocumentReference docRef = db.collection("users").document("aturing");
    // Add document data with an additional field ("middle")
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Alan");
    data.put("middle", "Mathison");
    data.put("last", "Turing");
    data.put("born", 1912);
    
    ApiFuture<WriteResult> result = docRef.set(data);
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection("users").document("aturing")
    doc_ref.set({"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912})

    Python

    doc_ref = db.collection("users").document("aturing")
    await doc_ref.set(
        {"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912}
    )
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Go
    _, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
    	"first":  "Alan",
    	"middle": "Mathison",
    	"last":   "Turing",
    	"born":   1912,
    })
    if err != nil {
    	log.Fatalf("Failed adding aturing: %v", err)
    }
    PHP

    PHP

    Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.

    $docRef = $db->collection('samples/php/users')->document('aturing');
    $docRef->set([
        'first' => 'Alan',
        'middle' => 'Mathison',
        'last' => 'Turing',
        'born' => 1912
    ]);
    printf('Added data to the aturing document in the users collection.' . PHP_EOL);
    C#
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Alan" },
        { "Middle", "Mathison" },
        { "Last", "Turing" },
        { "Born", 1912 }
    };
    await docRef.SetAsync(user);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/aturing"
    
    doc_ref.set(
      {
        first:  "Alan",
        middle: "Mathison",
        last:   "Turing",
        born:   1912
      }
    )
    
    puts "Added data to the aturing document in the users collection."

    Lire des données

    Utilisez la visionneuse de données de la console Firebase pour vérifier rapidement que vous avez bien ajouté des données à Cloud Firestore.

    Vous pouvez également utiliser la méthode "get" pour récupérer l'ensemble de la collection.

    Java
    // asynchronously retrieve all users
    ApiFuture<QuerySnapshot> query = db.collection("users").get();
    // ...
    // query.get() blocks on response
    QuerySnapshot querySnapshot = query.get();
    List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      System.out.println("User: " + document.getId());
      System.out.println("First: " + document.getString("first"));
      if (document.contains("middle")) {
        System.out.println("Middle: " + document.getString("middle"));
      }
      System.out.println("Last: " + document.getString("last"));
      System.out.println("Born: " + document.getLong("born"));
    }
    Python
    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")

    Python

    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    async for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Go
    iter := client.Collection("users").Documents(ctx)
    for {
    	doc, err := iter.Next()
    	if err == iterator.Done {
    		break
    	}
    	if err != nil {
    		log.Fatalf("Failed to iterate: %v", err)
    	}
    	fmt.Println(doc.Data())
    }
    PHP

    PHP

    Pour en savoir plus sur l'installation et la création d'un client Cloud Firestore, consultez Bibliothèques clientes Cloud Firestore.

    $usersRef = $db->collection('samples/php/users');
    $snapshot = $usersRef->documents();
    foreach ($snapshot as $user) {
        printf('User: %s' . PHP_EOL, $user->id());
        printf('First: %s' . PHP_EOL, $user['first']);
        if (!empty($user['middle'])) {
            printf('Middle: %s' . PHP_EOL, $user['middle']);
        }
        printf('Last: %s' . PHP_EOL, $user['last']);
        printf('Born: %d' . PHP_EOL, $user['born']);
        printf(PHP_EOL);
    }
    printf('Retrieved and printed out all documents from the users collection.' . PHP_EOL);
    C#
    CollectionReference usersRef = db.Collection("users");
    QuerySnapshot snapshot = await usersRef.GetSnapshotAsync();
    foreach (DocumentSnapshot document in snapshot.Documents)
    {
        Console.WriteLine("User: {0}", document.Id);
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Console.WriteLine("First: {0}", documentDictionary["First"]);
        if (documentDictionary.ContainsKey("Middle"))
        {
            Console.WriteLine("Middle: {0}", documentDictionary["Middle"]);
        }
        Console.WriteLine("Last: {0}", documentDictionary["Last"]);
        Console.WriteLine("Born: {0}", documentDictionary["Born"]);
        Console.WriteLine();
    }
    Ruby
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    Étapes suivantes

    Approfondissez vos connaissances sur les sujets suivants :