2016-02-12 21 views
25

Sono un utente di parse.com e ora cerco un altro servizio. Come posso scrivere la logica di ritorno su Firebase?Logica di Firebase e backend

diciamo che voglio convalidare tutti i valori sul lato server o attivare le cose. Ho pensato a una soluzione, ma voglio sapere il modo consigliato.

penso a

  1. creare server di nodejs, che utilizza espresso.
  2. creare i middleware per gestire la logica.
  3. invia richiesta di riposo dall'app, che attiva il middleware
  4. utilizza il sdk nodejs di firebase per aggiornare i valori in base ai parametri della richiesta http.
  5. e implementare su App gestore Firebase che ascolta i cambiamenti

enter image description here

loro qualcosa di più semplice? In analisi ho usato il codice cloud, voglio che la logica non sia sul lato client ma su un lato server.

+1

Ottima domanda! Come probabilmente già visto, Firebase non ha ancora un equivalente diretto per il Codice Cloud (ancora). Ho descritto/collegato alcuni approcci di seguito. Basta commentare se qualcosa non è chiaro! –

+0

[Hai mai visto questo video di Rob Dodson che spiega come usare Firebase with Polymer] (https://youtu.be/1f_Tj_JnStA?t=12m52s)? Penso che sia una combinazione molto potente. https://youtu.be/1f_Tj_JnStA?t=12m52s – Mowzer

risposta

39

aggiornamento (10 marzo 2017): mentre l'architettura descrivo qui di seguito è ancora valido e può essere utilizzato per combinare Firebase con qualsiasi infrastruttura esistente, Firebase appena rilasciato Cloud Functions for Firebase, che consente di eseguire le funzioni JavaScript su Google server in risposta agli eventi Firebase (come le modifiche al database, gli utenti che accedono e molto altro).


Le architetture comuni di applicazioni Firebase sono abbastanza ben definito in questo post del blog Where does Firebase fit in your app?.

L'architettura proposta è la più vicina all'architettura 3, in cui il codice lato client parla direttamente a Firebase e direttamente al server node.js.

Inoltre, consiglio vivamente di prendere in considerazione l'opzione 2, in cui tutte le interazioni tra client e server vengono eseguite tramite Firebase. Un ottimo esempio di questo tipo di architettura è lo Flashlight search integration. I clienti scrivono le loro query di ricerca nel database Firebase. Il server ascolta tali richieste, esegue la query e scrive la risposta sul database. Il client attende questa risposta.

Un semplice schema per questo server potrebbe essere:

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(); 
     } 
    }); 
}) 

Con questo ultimo approccio al cliente parla mai direttamente al server, che rimuove tutti i tipi di potenziali problemi che si devono preoccupare. Per questo motivo a volte mi riferisco a loro come "bot", invece di server.

+1

È un sistema di coda. Quindi il client può qualunque cosa voglia (beh, qualunque sia la [sicurezza + regole di convalida] (https://www.firebase.com/docs/security/guide/) allow) come una richiesta, ma il tuo bot/server determina cosa fare con esso e quale risposta dare (se presente). Può semplicemente ignorare le richieste che ritiene "non valide" e lasciare il client canaglia in attesa di una risposta. È inoltre possibile creare la gestione degli errori nel protocollo richiesta/risposta e inviare una risposta di tipo "NOPE". È proprio come un'API, eccetto che usi il nostro database per esporlo. –

+0

Quindi, in questo caso, ho bisogno di un server. Non è meglio usare socket.io? mi sembra di rimuovere uno strato e più semplice. – Alon

+1

Se ti piace fare il middleware, ci sono un sacco di alternative. Ciò che è "migliore" è soggettivo. Volevo solo approfondire come creare un'API su Firebase, senza fare il middleware. Al momento è l'alternativa più comunemente usata al codice cloud con Firebase. –

2

Ecco cosa farei:

  • Validade tutti gli ingressi con il ".validate" rules. Nessun server necessario per questo.
  • Se si dispone di attività da eseguire, utilizzare Firebase Queue, un bot per eseguire le attività e il gioco è fatto.

Se non fai l'ultimo, si possono avere due problemi:

  • Se si tenta di utilizzare lo schema che hai postato che sarà un po 'difficile da ottenere l'oggetto auth al server (ma non impossibile). Vai avanti se non è necessario convalidare l'utente per consentire la richiesta.

  • Se si utilizza solo l'app di Firebase regolare per ascoltare le modifiche e rispondere (modificando l'oggetto per esempio, come il codice di esempio di Frank van Puffelen), si potrebbero avere problemi di scalabilità. Una volta che il back-end si ridimensiona a due (o più) istanze, una modifica firebase attiverà l'attività su tutte loro. Ogni istanza sarà notato c'è stato un cambiamento, quindi eseguire la stessa operazione una volta, aggiungere/sostituire l'oggetto di risposta una volta e cercare di rimuovere l'oggetto di richiesta una volta ..

Utilizzando Firebase coda evita entrambi questi i problemi.

4

Oggi Google ha annunciato funzioni cloud per Firebase https://firebase.google.com/features/functions/

Questa è una grande soluzione per le architetture e la logica back-end in Firebase.

+0

Ho avuto modo di conoscerla e ora ho risolto il problema che stavo affrontando solo un mese fa, grazie alla squadra di Firebase! –

+0

Sono giunto a questa domanda StackOverflow perché non posso filtrare il mio sito eCommerce utilizzando l'unico firebase. come posso riuscirci. se utilizzo alcune API REST, puoi guidarmi come dovrei fare – George

+0

@ George, puoi utilizzare il nuovo cloudstore di Firebase. Ma ancora, non puoi fare una ricerca a tutto testo. Penso che potresti voler utilizzare un motore di ricerca esterno come ad esempio algolia per abilitare una funzione di ricerca avanzata nel tuo sito web. –