BAAS – GOOGLE FIREBASE

BaaS: Backend-as-a-Service

Backend-as-a-Service, in gergo Baas, è un tipo di servizio cloud tramite il quale gli sviluppatori possono esternalizzare tutte le funzionalità di backend di un’applicazione web o mobile, dedicando la propria attenzione esclusivamente allo sviluppo ed alla manutenzione del frontend.

BaaS fornisce agli sviluppatori una serie di strumenti per creare un backend e per accelerare il processo di sviluppo di un’applicazione. Ha funzionalità pronte all’uso come la gestione dei dati, le API, le integrazioni dei social media, l’archiviazione dei file e le notifiche push.

Per prima cosa è necessario capire la differenza tra frontend e backend; per questo scopo ci viene in aiuto la classica metafora dell’iceberg, dove quello che vediamo emergere in superficie, ovvero il frontend, è solo una piccola parte di tutto l’insieme e rappresenta solo una percentuale del lavoro totale. Di contro il backend, rappresentato dalla restante parte sommersa dell’iceberg e non visibile dagli utenti, rappresenta l’altra parte del lavoro indispensabile per lo sviluppo di un’applicazione entreprise.

Detto questo si è già in grado di capire come il risparmio di tempo nello sviluppo del backend porti ad un investimento maggiore in termini di UI/UX, attraverso un focus maggiore nello sviluppo del frontend. E sappiamo bene come oggi sia necessario sviluppare applicazioni accattivanti e user-friendly per potersi accaparrare una fetta del mercato.

Oltre a questo, essendo Baas un pool di servizi basato sul cloud, è da considerare anche il risparmio in termini di hardware necessario ed in termini di manutenzione dello stesso. Oltre al risparmio economico, dato anche dal risparmio dei tempi di sviluppo, devono essere necessariamente presi in considerazione anche i benefici portati dal cloud per quanto riguarda la capacità di scalare, ovvero la capacità di un sistema di adeguarsi rapidamente alla crescente richiesta di risorse.

Ricapitolando e schematizzando, i vantaggi commerciali derivati dall’adozione di BaaS sono i seguenti:

  • Riduzione dei costi hardware
  • Riduzione dei costi di sviluppo
  • Riduzione del time to market
  • Alta scalabilità
  • Esternalizzazione delle responsabilità
  • Focus su UI/UX del frontend

Ovviamente non può essere tutto rose e fiori; esistono anche alcuni difetti nell’adozione di Baas, legati sostanzialmente alla capacità di customizzazione di un prodotto. Infatti esternalizzare vuol anche dire scegliere una soluzione di terzi ed essere vincolati alle scelte fatte dal fornitore.

Questo si traduce in:

  • Meno flessibilità
  • Meno capacità di customizzazione in termini di funzionalità
  • Blocco da parte dei fornitori in caso di piattaforme chiuse

Iaas – Paas – Baas

Nel panorama dei servizi serverless, oltre a Backend-as-a-Service, è giusto ricordare anche Infrastructure-as-a-Service (IaaS) e Platform-as-a-Service (PaaS) che rappresentano gli step attraverso i quali si è arrivati alla proposta di soluzioni di tipo BaaS.

In particolare:

  • IaaS = Data Center + Servers + Storage + Networking
  • PaaS = IaaS + Deploy + Manage + Scale
  • BaaS = PaaS + Features to Build Backend

Dall’immagine sopra è possibile vedere come Backend-as-a-Service rappresenti una soluzione completa e pronta all’uso da affiancare alla realizzazione del frontend di un’applicazione web o mobile (anche se in quest’ultimo caso è più corretto parlare di MBaaS dove la ‘M’ sta appunto per Mobile).

Architettura e funzionalità di BaaS

Dal punto di vista architetturale e senza entrare troppo nei dettagli implementativi, una soluzione di Backend-as-a-Service è suddivisa in tre livelli. Partendo dal basso, troviamo: lo strato relativo alla gestione dei dati formato da un cluster di database, lo strato applicativo formato da un cluster di server per la gestione delle richieste e lo strato adibito alla connessione delle applicazioni con internet formato da Load Balancers per il bilanciamento del carico e Content Delivery Network (CDN) per la distribuzione dei contenuti.

Per quanto riguarda l’insieme delle funzionalità che devono essere fornite da BaaS, troviamo:

  • Salvataggio e gestione dei dati
  • Autenticazione utenti
  • Integrazione con I social network (Facebook, LinkedIn, Twitter, etc.)
  • Notifiche push
  • Cloud Functions
  • Geolocalizzazione
  • Supporto al logging
  • CDN e Cache
  • Infrastructure (Security, auto-scaling, backup, ottimizzazione e analisi)

Google Firebase

Firebase è la piattaforma Backend-as-a-Service di Google. Nata nel 2011 come una startup e acquistata da “Big G” nel 2014, offre numerosi servizi semplicemente con l’integrazione di poche righe di codice all’interno del proprio progetto.

Facendo parte del mondo BaaS, l’obiettivo di Firebase è quello di alleggerire gli sviluppatori web e mobile in modo da farli concentrare sulla realizzazione di esperienze utente fantastiche. A dimostrazione di quanto appena scritto, nella homepage del progetto troviamo il seguente slogan:

“Build apps fast, without managing infrastructure” – “Crea applicazioni velocemente senza gestire l’infrastruttura”.

Infatti con Firebase non è necessario gestire i server. Non è necessario scrivere API. Firebase è il tuo server, la tua API e il tuo archivio dati, tutti scritti in modo così generico che puoi modificarlo per soddisfare la maggior parte delle esigenze.

L’immagine sottostante mostra tutte le funzionalità (disponibili a Novembre 2019) che Firebase mette a disposizione degli sviluppatori. Tra queste le più significative e rilevanti, a mio giudizio, sono: Google Analytics, Authentication, Cloud Firestore, Cloud Messaging e Cloud Functions.

Oltre alle funzionalità sopra elencate, Firebase mette a disposizione l’integrazione per servizi come Google Ads, AdMob, Google Marketing Platform, Play Store BigQuery, Slack e Jira.

Infine, fornisce anche estensioni pronte all’uso da integrare nelle app per quanto riguarda il ridimensionamento delle immagini, la traduzione di un testo e l’invio di email.

Per poter disporre di tutto questo è necessario loggarsi alla piattaforma tramite un account Google (lo stesso utilizzato per Gmail) e subito si avrà a disposizione il piano base, totalmente gratuito, che per piccole applicazioni o per lo sviluppo di applicazioni enterprise è più che sufficiente.

Google Analytics

Con Google Analytics per Firebase lo sviluppatore ha fino a 500 eventi distinti e gratuiti per creare la reportistica oltre alla possibilità di creare eventi “custom”. Questa è sicuramente una delle funzionalità principali in quanto tramite i reports e le statistiche derivanti da essi è possibile profilare l’utente che sta utilizzando l’applicazione e acquisire informazioni utili al fine di migliorare sia il prodotto che il marketing.

Ma non solo, tramite Analytics è possibile anche visualizzare i dati sugli arresti anomali, l’efficacia delle notifiche, le prestazioni del collegamento diretto, i dati di acquisto in-app e altro ancora tutto rigorosamente in tempo reale.

Per poter usufruire del servizio, ad esempio in un’applicazione sviluppata tramite Flutter, è sufficiente inserire la dipendenza al plugin firebase_analytics ed inserire il seguente blocco di codice nel main dell’applicazione.

Authentication

Firebase Auth ha un sistema di autenticazione basato su email e password totalmente integrato con tutte le altre funzionalità. Oltre a questo supporta anche OAuth2 per l’autenticazione tramite Google, Facebook, Twitter e GitHub.

L’obiettivo dichiarato è quello di semplificare al massimo la creazione di sistemi di autenticazione sicuri, migliorando al contempo l’esperienza di accesso per gli utenti finali.

Per creare il classico form di login tramite email e password, dopo aver inserito la dipendenza al pacchetto firebase_auth è sufficiente chiamare i metodi messi a disposizione dall’istanza dell’oggetto FirebaseAuth.instance, come nell’esempio sottostante.

In pratica quello che dobbiamo fare è concentrarci sulla UI/UX della pagina di login e limitarci a lasciar fare il “lavoro sporco” a FirebaseAuth.

Cloud Firestore

Firestore è un database NoSQL completamente gestito per lo sviluppo di applicazioni mobile e web. È progettato per archiviare e sincronizzare facilmente i dati delle app su scala globale ed è ora (al momento della scrittura di questo articolo) disponibile in versione beta.

Le caratteristiche principali di Cloud Firestore includono:

  • Documenti e raccolte con potenti query
  • Sincronizzazione dei dati in tempo reale
  • Replica dati automatizzata
  • SDK per iOS, Android e Web con accesso ai dati offline
  • SDK per Node, Python, Go e Java
  • Alta scalabilità

Per integrare le funzionalità di Cloud Firestore, dopo aver inserito la dipendenza al pacchetto cloud_firestore, è sufficiente utilizzare l’istanza dell’oggetto Firestore.instance come nell’esempio sottostante.

Cloud Messaging

Firebase Cloud Messaging (FCM) fornisce una connessione affidabile ed efficiente in termini di batteria tra il server e i dispositivi che consente di recapitare e ricevere messaggi e notifiche su iOS, Android e Web gratuitamente.

Con FCM è possibile creare una linea di comunicazione tra chi ha i dispositivi connessi al servizio e chi li fornisce. L’amministratore può infatti decidere di inviare messaggi a tutti i device, a gruppi di device o a uno singolo.

È possibile inviare messaggi di notifica immediatamente o in secondo momento, nel fuso orario locale dell’utente. È possibile inviare messaggi personalizzati e con determinati livelli di priorità, ma soprattutto è possibile monitorare gli eventi di conversione personalizzati tramite Analytics. L’utilizzo più comune di FCM è quello pilotare gli utenti indirizzandoli verso ciò che più li aggrada.

L’integrazione di Cloud Messaging in una applicazione è un po’ più complicata (e lunga da descrivere) rispetto al resto delle funzionalità viste fino ad ora, e richiede una customizzazione per sistema operativo Android o iOS. In entrambi i casi si basa però su un meccanismo di callback differenziato a seconda che si tratti di una notifica o di un invio di dati.

In particolare una notifica viene visualizzata nella barra delle notifiche del device e la callback è eseguita al momento del click su di essa. Nel caso di invio dati esso avviene quando l’app sta lavorando in background ed è del tutto trasparente all’utilizzatore.

Accoppiando a FCB la funzionalità di A/B testing è possibile provare diverse versioni dei messaggi di notifica e tramite l’abbinamento con Analytics è possibile analizzare quale versione si comporta meglio, ovviamente in base agli obiettivi prefissati.

Cloud Functions

Questa dicitura si riferisce alla possibilità di eseguire codice sul server senza implementarlo all’interno dei progetti con il beneficio di non dover aggiornare continuamente le applicazioni bensì usufruire di un servizio sempre aggiornato tramite una semplice chiamata http.

La distribuzione del codice sui server Google Firebase richiede un solo comando. Le funzioni cloud aumentano automaticamente le risorse di elaborazione per adattarsi ai modelli di utilizzo della app. Non è necessario preoccuparsi delle credenziali SSH, della configurazione del server, del provisioning di nuovi server o della disattivazione di quelli vecchi.

Per utilizzare le Cloud Functions, dopo aver inserito il riferimento al plugin cloud_functions, è sufficiente utilizzare il codice mostrato sotto distinguendo tra chiamata con parametri o senza parametri (il nome della funzione è obbligatorio).

Conclusioni

Oltre a quanto sopra descritto, Google Firebase offre una ampia gamma di funzionalità che lo rendono una piattaforma di sviluppo di app completa. Funzioni quale l’Hosting per il deploy della landing page della app mobile, oppure funzioni quale il Performance Monitor per l’analisi del rendimento dal punto di vista degli utenti, ne fanno un punto di riferimento per lo sviluppo serverless.

Non solo, poiché le funzionalità messe a disposizione non riguardano esclusivamente il mondo dello sviluppo software, ma vanno incontro anche alle esigenze degli operatori di marketing e dei product manager.

Per quanto riguarda il costo, per poter usufruire dei servizi esistono tre differenti piani di affiliazione, che si differenziano per parametri quali lo spazio per l’archiviazione, la banda, il numero di query effettuabili e la potenza della CPU:

  • Spark Plan: è il piano gratuito dedicato a piccole applicazioni ed hobbisti
  • Flame Plan: è il piano da utilizzare nel caso di applicazioni enterprise che necessitano di scalare
  • Blaze Plan: è il piano che consente di pagare a seconda dell’utilizzo. Una tariffa a consumo

In conclusione, Firebase consente di dimenticarsi completamente dell’infrastruttura (del tempo e dei costi) necessaria a far vivere una app mobile o una web application a patto però che si desideri sacrificare la possibilità di customizzare il prodotto poiché essendo un servizio di terza parte non open-source non consente alcun tipo di personalizzazione.