web-dev-qa-db-fra.com

Logique Firebase et backend

Je suis utilisateur de parse.com, et maintenant je cherche un autre service. Comment puis-je réécrire la logique de fin dans Firebase?

disons que je veux valider toutes les valeurs côté serveur, ou déclencher des choses. J'ai pensé à une solution, mais je veux connaître la méthode recommandée.

Je pense

  1. créer un serveur nodejs, qui utilise express.
  2. créer des middlewares pour gérer la logique.
  3. envoyer une demande de repos depuis l'application, ce qui déclenche les middlewares
  4. utilisez le nodejs sdk de firebase pour mettre à jour les valeurs en fonction des paramètres de la requête http.
  5. Et implémentez sur le gestionnaire de base de feu d'application qui écoutent les changements

enter image description here

leur quelque chose de plus simple? En fait, j'ai utilisé du code cloud, je veux que la logique ne soit pas côté client mais côté serveur.

31
Alon

Mise à jour (10 mars 2017) : Bien que l'architecture que je présente ci-dessous soit toujours valide et puisse être utilisée pour combiner Firebase avec n'importe quelle infrastructure existante , Firebase vient de sortir Cloud Functions for Firebase , qui vous permet d'exécuter des fonctions JavaScript sur les serveurs de Google en réponse aux événements Firebase (tels que les changements de base de données, les utilisateurs se connectant et bien plus).


Les architectures courantes des applications Firebase sont assez bien définies dans cet article de blog Où Firebase s'intègre-t-il dans votre application? .

L'architecture que vous proposez est la plus proche de l'architecture 3, où votre code côté client parle directement à Firebase et à votre serveur node.js directement.

Je recommande également fortement de considérer l'option 2, où toutes les interactions entre les clients et le serveur passent par Firebase. Un bon exemple de ce type d'architecture est le intégration de recherche de lampe de poche . Les clients écrivent leurs requêtes de recherche dans la base de données Firebase. Le serveur écoute ces requêtes, exécute la requête et réécrit la réponse dans la base de données. Le client attend cette réponse.

Un schéma simple pour ce serveur pourrait être:

var ref = new Firebase('https://yours.firebaseio.com/searches');
ref.child('requests').on('child_added', function(requestSnapshot) {

    // TODO: execute your operation for the request

    var responseRef = ref.child('responses').child(requestSnapshot.key());
    responseRef.set(result, function(error) {
        if (!error) {
            // remove the request, since we've handled it
            requestSnapshot.ref().remove();
        }
    });
})

Avec cette dernière approche, le client ne parle jamais directement à votre serveur, ce qui supprime toutes sortes de problèmes potentiels dont vous devez vous soucier. Pour cette raison, je les appelle parfois des "bots", au lieu de serveurs.

42
Frank van Puffelen

2017

Aujourd'hui, Google a annoncé Fonctions cloud pour Firebase https://firebase.google.com/features/functions/

Il s'agit d'une excellente solution pour les architectures et la logique d'arrière-plan dans Firebase.

4
Alon

Voici ce que je ferais:

  • Validez toutes les entrées avec les règles ". Validate" . Aucun serveur nécessaire pour cela.
  • Si vous avez des tâches à exécuter, utilisez Firebase Queue , un bot pour exécuter les tâches et vous avez terminé.

Si vous ne faites pas le dernier, vous pouvez avoir deux problèmes:

  • Si vous essayez d'utiliser le diagramme que vous avez publié, il sera un peu difficile d'obtenir l'objet auth sur le serveur (mais pas impossible). Allez-y si vous n'avez pas besoin de valider l'utilisateur pour autoriser la demande.

  • Si vous utilisez uniquement l'application Firebase standard pour écouter les modifications et réagir (en modifiant l'objet par exemple, comme l'exemple de code de Frank van Puffelen), vous pourriez avoir des problèmes d'évolutivité. Une fois que votre back-end évolue vers deux (ou plusieurs) instances, une modification de la base de feu déclenchera la tâche sur chacun d'eux. Chaque instance remarquera qu'il y a eu un changement, puis exécutez la même tâche une fois par chaque, ajoutez/remplacez l'objet de réponse une fois par chaque fois et essayez de supprimer l'objet de demande une fois par chaque ..

L'utilisation de Firebase Queue évite ces deux problèmes.

2
ThadeuLuz