Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Firebase: cos'è e come funziona il backend NoSQL

Le principali caratteristiche di Firebase, un servizio online integrabile con qualsiasi progetto software web e mobile, che consente la gestione trasparente di un database NoSQL ad alta disponibilità.
Le principali caratteristiche di Firebase, un servizio online integrabile con qualsiasi progetto software web e mobile, che consente la gestione trasparente di un database NoSQL ad alta disponibilità.
Link copiato negli appunti

Firebase è un potente servizio on line che permette di salvare e sincronizzare i dati elaborati da applicazioni web e mobile. Si tratta di un database
NoSQL
dalle grandissime risorse, ad alta disponibilità ed integrabile in tempi rapidissimi in altri progetti software, semplicemente sottoscrivendo un account al
servizio. Questo articolo ne presenta le caratteristiche e mostra i passi necessari da compiere per iniziare ad utilizzarlo subito.

I backend: finalità e difficoltà realizzative

Firebase rientra in una categoria di servizi on-line in rapidissima diffusione e noti come backend, la cui necessità è divenuta sempre più evidente negli
ultimi anni. Le crescenti capacità di dispositivi e sistemi operativi mobili, insieme alle connessioni in rete sempre più diffuse e veloci hanno offerto nuovi
strumenti alla fantasia degli sviluppatori. In questo contesto le nuove applicazioni tengono ad essere sempre meno “chiuse” nei dispositivi, e maggiormente
capaci di interagire con servizi remoti creando reti “social” di utenti.

Per consentire il funzionamento di tutto ciò, è necessaria una controparte server in grado di rendere disponibili, tramite API, servizi quali autenticazione, storage dei
dati, push notification, comunicazione tra utenti e molto altro: i backend, appunto.

La creazione di un backend per conto proprio può portare gli sviluppatori ad incontrare delle difficoltà di vario genere. Innanzitutto di carattere
tecnico: i programmatori potrebbero non avere le competenze e l'esperienza necessarie in ambito server per realizzare un backend di qualità, sicuro ed efficiente.
Inoltre potrebbero esservi difficoltà organizzative, per esempio nel conciliare tempistiche e risorse umane coinvolte nello sviluppo
delle componenti server e client.

Esistono, infine, problematiche di carattere infrastrutturale. Viviamo nell'epoca del Cloud, delle risorse e delle funzionalità
offerte “as a service”, in cui senza avere a disposizione proprie macchine fisiche o virtuali si possono trovare servizi in rete che offrono elaborazione e
storage in maniera affidabile, flessibile e con costi contenuti.

In casi in cui si richiede un backend per la propria app mobile o web ma si vogliono evitare difficoltà come quelle appena citate, si può fare affidamento ad
un servizio online, offerto in cloud e già pronto all'interazione con i nostri software: Firebase è uno di questi.

Cos'è Firebase database

Nel mese di ottobre 2014 un comunicato apparso sul sito ufficiale del progetto a firma di James
Tamplin, CEO e cofondatore, annunciava che Firebase entrava a fare parte dei servizi Google. L'acquisizione, di cui non sono stati rivelati i dettagli economici,
permetterà a Firebase di crescere ben oltre le proprie possibilità e alla società di Mountain View di inserirlo nella Google Cloud Platform.

Tamplin stesso dichiarava nel post che in soli tre anni la sua “pazza idea che avrebbe potuto funzionare” si era trasformata in una realtà su cui 110.000
sviluppatori basavano il proprio lavoro.

Il successo di Firebase è legato indiscutibilmente alle sue caratteristiche peculiari:

    • capacità di sincronizzazione dei dati oltre che di storage: Firebase è in grado di aggiornare i dati istantaneamente, sia se integrato
      in app web che mobile. Non appena l'app recupera la connettività sicronizza i dati mostrati con le ultime modifiche apportate;
    • disponibilità di librerie client per integrare Firebase in ogni app. Android, Javascript e framework con esso realizzati (Node.js,
      Angular.js, Ember.js, Backbone.js e molti altri), Java e sistemi Apple: per tutte le più comuni tecnologie web e mobile esistono librerie già pronte per essere importate nei
      propri progetti;
    • API REST: rendono disponibili le funzionalità di Firebase per ogni tecnologia per cui non esistano librerie apposite o in caso di
      operazioni non contemplate in esse;
    • Sicurezza: i dati immagazzinati in Firebase sono replicati e sottoposti a backup continuamente. La comunicazione con i client avviene
      sempre in modalità crittografata tramite SSL con certificati a 2048-bit;
    • costi differenziati in base all'uso e alle capacità richiesti. Si parte dal “Hacker Plan”, gratuito, quello che useremo a breve per i
      nostri esempi. È sufficiente sottoscriverlo per avere a disposizione un massimo di 50 connessioni, 5 GB di trasferimento dati e 100 MB di storage. L'uso
      di questo piano gratuito è esclusivamente didattico e di sperimentazione ma utilissimo per imparare ad integrare Firebase nei propri progetti. Per contesti
      di produzione, esistono altri piani (Candle, Bonfire, Blaze, Inferno Plan) con prezzi mensili variabili da 49 $ fino a 1.499 $ e caratterizzati da capacità
      di memorizzazione crescenti.

Nel seguito dell'articolo vedremo come utilizzare Firebase, integrandone le funzionalità nello sviluppo dei nostri software.

Iniziare a programmare con Firebase

Firebase offre una documentazione chiara e completa, accessibile tramite l'apposita sezione sul sito ufficiale. Vengono mostrate subito le tecnologie più comunemente usate con Firebase, e per
ognuna di esse è possibile consultare documentazioni di tipo differente:

      • Quick start: guida rapida per iniziare ad usare in pochi minuti le funzionalità;
      • Guida: realizzata passo passo per accompagnare l'utente in un approfondimento imperniato sui capisaldi di Firebase;
      • API Reference con la documentazione approfondita.

A corredo, inoltre, ci sono esempi di codice e librerie da scaricare liberamente.

Creazione Account: user-firebase

In ogni caso, sarà necessario per prima cosa ottenere un account di accesso al servizio. Andrà benissimo per la sperimentazione un Free Plan, totalmente gratuito, e perfetto per imparare ad interagire con il database.

All'account creato sarà associato un indirizzo, nel formato <username>.firebaseio.com. Per i successivi esempi, supponiamo che esso sia
user-firebase-1000.firebaseio.com.

Tale URL potrà essere utilizzato all'interno del codice come riferimento alla base di dati remota e, tramite browser, per visualizzare un pannello che
permette l'accesso visuale.

La prima cosa che deve essere compresa per lavorare in Firebase è il modo in cui i dati vengono immagazzinati. Non vi sono tabelle né record, nessuna
traccia dell'approccio relazionale. Tutti i dati inseriti in Firebase vanno a costituire un albero JSON. I dati al suo interno potranno
essere strutturati secondo questo formato: si potranno inserire mappe, liste, stringhe, tipi numerici e booleani.

Per prendere confidenza con la struttura dati di Firebase, conviene usare il pannello di controllo, per il momento senza scrivere codice. La figura seguente mostra informazioni che definiscono tre utenti, ognuno dei quali caratterizzato da nome, cognome ed età.

I simboli + (in verde) e x (in rosso) servono, rispettivamente, ad inserire ed eliminare nodi.

I dati aggiunti saranno usati come chiavi e potranno essere utilizzati per recuperare i valori eventualmente ad essi associati.

Peculiarità di Firebase

È interessante notare che ogni nodo ha un suo indirizzo, che si renderà utile nella programmazione delle nostre app per accedere ai dati. Ad esempio,
con riferimento alla precedente figura, all'URL https://user-firebase-1000.firebaseio.com/users/1/cognome corrisponderà il valore Verdi. Osservando l'indirizzo da
vicino si vede che users è la radice della struttura dati, il valore 1 indica la posizione del secondo nodo della lista di utenti (l'indice ha base 0), e
cognome sarà la chiave con cui accedere al valore rintracciato.

Una volta preso contatto con la struttura dati di Firebase si potrà iniziare a programmare.
Qualunque tecnologia si decida di utilizzare, sarà comunque necessario effettuare il link alla libreria corrispondente nel progetto.

Per fare alcuni esempi, nel mondo Java e Android si potranno sfruttare le capacità di Maven. Questo, ad esempio, è il nodo dependency da inserire nel file
pom.xml:

<dependency>
<groupId>com.firebase</groupId>
<artifactId>firebase-client</artifactId>
<version>[2.1.1,)</version>
</dependency>

In alternativa, si potrà scaricare il pacchetto .jar ed importarlo.

In JavaScript, invece, si potrà importare la libreria tramite il tag HTML <script>:

<script src="https://cdn.firebase.com/js/client/2.1.1/firebase.js"></script>

Inserimento dei dati

Tra i principali concetti da imparare, ha particolare importanza l'inserimento di nuovi dati.
In Java, ciò può essere fatto usando un oggetto Firebase per collegarsi alla struttura dati remota, e sfruttando il metodo setValue per inserire un oggetto:

Firebase fb = new Firebase("https://user-firebase-1000.firebaseio.com");
fb.setValue("Nuovo valore da inserire");

Per fare un confronto con JavaScript, la stessa operazione potrà essere effettuata come segue:

var fb = new Firebase("https://user-firebase-1000.firebaseio.com");
fb.set({ name: "Nuovo valore da inserire" });

Recupero dei dati

Dopo aver inserito dati all'interno del nostro account Firebase, avremo bisogno di leggerli. Come spiegato nel paragrafo precedente ogni singolo dato
ha un indirizzo che lo rende accessibile in una modalità stile REST.

Quando si vorrà leggere un dato depositato nel proprio account si dovrà, per prima cosa, predisporre un riferimento all'indirizzo da leggere e,
successivamente, attivare un evento di callback ad esso collegato.

In JavaScript, il seguente codice recupera il valore 43 collegato al nodo https://user-firebase-1000.firebaseio.com/users/1/eta:

// creazione del riferimento al nodo Firebase
var ref = new Firebase("https://user-firebase-1000.firebaseio.com/users/1/eta");
// collegamento della funzione callback all'evento value
ref.on("value", function(snapshot) {
console.log("Valore recuperato: " + snapshot.val());
}, function (errorObject) {
console.log("Errore: " + errorObject.code);
});

Al momento dell'effettivo recupero del valore verrà invocata la funzione di callback, che stamperà un messaggio nella console.

Il valore recuperato, nella terminologia di Firebase, prende il nome di DataSnapshot e rappresenta l'immagine del contenuto di un nodo in
un dato istante. La stringa passata come primo argomento al metodo on indica il tipo di evento di cui siamo in attesa. L'evento value, usato nel caso precedente, serve a leggere uno snapshot dei dati.

Altri eventi, alternativi a value, offrono contemporaneamente la lettura di uno snapshot e la sincronizzazione automatica a fronte di modifiche intervenute
sui dati remoti. Si tratta di:

      • child_added: utilizzato per le liste di oggetti, viene invocato per ognuno degli elementi che le compongono e per ogni nuovo elemento che vi viene
        aggiunto;
      • child_changed: viene attivato quando il nodo puntato è modificato. Nel metodo di callback sarà disponibile il nuovo dato aggiunto in remoto;
      • child_removed: invocato alla rimozione del nodo.

Tipicamente i tre eventi vengono configurati insieme in uno script, per poter fornire alla pagina un flusso continuo di aggiornamento dei dati ottenuti.

I callback che abbiamo assegnato con il metodo on possono essere rimossi con il metodo off.

Assumendo che ref sia il riferimento ad un nodo Firebase, il seguente codice cancella tutti i metodi di callback assegnati all'evento value del riferimento ref:

ref.off("value")

Altrimenti, in maniera più mirata, si può specificare solo il callback da eliminare su quel particolare evento:

ref.off("value", callbackFun)

Infine, ref.off() rimuove tutti i callback di qualunque tipo.

È possibile anche fare in modo che un callback venga cancellato subito dopo avere ottenuto lo snapshot dei dati. In questo caso si userà il metodo once:

ref.once("value", function(snapshot)
{
//operazioni da eseguire
});

Il recupero dei dati può essere arricchito con funzionalità “da query”, principalmente, ordinamento e limitazione del numero di risultati.

I metodi che svolgono questi compiti sono:

      • ordinamento: orderByChild(), orderByKey() e orderByPriority(). Il primo ordinerà i nodi in base ad una child key, ossia una chiave contenuta in essi; il
        secondo ordinerà i dati in base alle chiavi; l'ultimo li ordinerà in base alla priorità del nodo;
      • selezione del numero: limitToFirst(), limitToLast(), startAt(), endAt() e equalTo(). Lo scopo di questi metodi
        essenzialmente è prelevare una porzione dei dati ottenuti. Ad esempio, limitToFirst e limitToLast li
        preleveranno rispettivamente all'inizio e alla fine della lista, mentre startAt ed endAt permetteranno di ottenere una porzione centrale.

Ad esempio, si potrebbe eseguire una query per recuperare i due oggetti con il prezzo minore:

ref.orderByChild("price").limitToFirst(2).on("child_added", function(snapshot)
{
// operazioni da svolgere
});

Quanto è stato mostrato è realizzabile anche con le altre librerie fornite a supporto di Firebase.

In Java, ad esempio, si sovlgeranno le stesse operazioni. Si selezionerà un riferimento di classe Firebase che punterà ad un nodo di dati e si preleverà lo
snapshot. I dati ottenuti apparterranno alla classe DataSnapshot.

I metodi di callback verranno collegati mediante listener. L'evento value verrà trattato usando il metodo addValueEventListener della classe Firebase. Il parametro
che riceverà in input sarà di tipo ValueEventListener ed al suo interno effettueremo l'override dei metodi onDataChange ed onCancelled.

Analogamente, si potrà definire un ChildEventListener che con i suoi metodi onChildAdded, onChildChanged e onChildRemoved risponderà ai corrispondenti
eventi.

Conclusioni

Questo è solo l'inizio di tutto quello che si può fare con Firebase.

Il programmatore neofita dell'argomento troverà la documentazione molto semplice, con concetti espressi chiaramente ed esempi molto utili. Oltre a quanto
visto si potranno realizzare query più complesse con filtraggio dei valori ed iterazioni. Altro argomento molto utile da affrontare è la sicurezza delle
informazioni, a partire dalla validazione dei dati e autenticazione degli accessi.

Sono tante le funzionalità che Firebase offre e sicuramente aumenteranno ancora quando la neonata alleanza con Google inizierà a dare frutti.

Ti consigliamo anche