Utilizarea Firebase Serverless – Aplicații mobile și web simplificate
Publicat: 2022-03-11Aplicațiile mobile și web necesită de obicei un server back-end. Aplicațiile web necesită un server web pentru a furniza conținut. Aplicațiile trebuie, de asemenea, să stocheze profiluri de utilizator și conținut media, cum ar fi imagini și videoclipuri. Comunicarea dintre aplicație și server se face adesea folosind un API, care este de obicei REST.
Aplicațiile sunt codificate într-o serie de limbi. O aplicație iOS este scrisă în Swift sau Objective-C. Aplicațiile Android sunt scrise în Java sau Kotlin. Aplicațiile web sunt scrise în HTML, CSS, JavaScript și, adesea, cadre complexe, cum ar fi Angular sau React. Dezvoltatorii front-end trebuie să cunoască limbile relevante și instrumentele de dezvoltare asociate acestora.
Serverele back-end sunt scrise într-o serie de limbi, inclusiv Go, Java, PHP și Python. Fiecare dintre aceste limbaje are propria sa suită de biblioteci pentru a facilita scrierea de aplicații complexe.
Majoritatea dezvoltatorilor se consideră dezvoltatori front-end sau back-end. Dezvoltatorii full-stack care sunt competenți în ambele roluri sunt relativ rari.
Rularea și întreținerea unui server back-end are propriile provocări. Serverele trebuie construite, actualizate și făcute copii de rezervă. Serverele trebuie, de asemenea, securizate pentru a preveni pierderea accidentală sau rău intenționată a datelor sau accesul la date sensibile. În plus, serverele trebuie să aibă nume de gazdă și adrese IP atribuite, astfel încât să poată fi conectate.
Ce este Firebase?
Firebase a început ca o arhitectură de mesagerie mobilă care a fost achiziționată de Google. De atunci, a evoluat pentru a fi o suită de peste 25 de componente care interoperează cu Google Cloud Platform.
Firebase constă din kituri de dezvoltare software (SDK), care permit dezvoltatorilor de telefonie mobilă și web să acceseze funcționalitatea cloud simplu, sigur și fiabil. Acestea compensează automat conexiunea slabă la rețea. Există o consolă web Firebase pentru activarea, administrarea și securizarea componentelor. Există, de asemenea, instrumente de linie de comandă și API-uri REST pentru o utilizare mai aprofundată.
Unele componente Firebase sunt mai cunoscute decât altele. Există puține dependențe între componente, ceea ce permite adoptarea incrementală a funcționalității. Autentificarea și analiza Firebase sunt cele mai utilizate.
Firebase a evoluat pentru a deveni o platformă care permite dezvoltatorilor front-end mobile și web să dezvolte aplicații complete fără a fi nevoie de servere back-end. Îmbunătățirile recente au facilitat foarte mult soluțiile fără server, care oferă o alternativă viabilă, scalabilă și rentabilă la soluțiile de server Cloud Virtual Machine.
Firebase de prețuri și planuri de facturare
Planul de bază de facturare Firebase, numit Spark, este gratuit. Există limite pentru utilizarea resurselor cloud, dar sunt destul de generoase. Este posibil să rulați o aplicație de dimensiuni rezonabile fără a suporta taxe.
Un site web cu conținut de până la 1 GB și transferuri de mai puțin de 10 GB/lună poate fi găzduit în cadrul planului Spark. Firestore permite până la 1 GB de date și trafic de rețea de până la 10 GB/lună. Limitele de stocare în cloud sunt de până la 5 GB de date și descărcări de până la 1 GB/zi.
Dacă aplicația are nevoie de mai multe resurse, este necesar un plan de facturare cu plată, cum ar fi plata pe măsură. Limitele gratuite ale planului Spark se aplică în continuare. Taxele facturabile sunt destul de mici. Prețurile pot fi găsite pe pagina de prețuri Firebase.
Mașinile virtuale care rulează în cloud suportă taxe în timp ce rulează, chiar dacă nu sunt utilizate. Soluțiile Firebase fără server se ridică la zero. Aceasta înseamnă că resursele rulează efectiv numai atunci când sunt utilizate și nu implică taxe atunci când nu sunt utilizate. Acesta este ideal pentru aplicații pentru afaceri sezoniere, cum ar fi închirieri de vacanță sau evenimente periodice, cum ar fi concertele. Ar fi multă activitate urmată de luni de inactivitate.
Cum se configurează Firebase
Pentru autentificare este necesar un cont de e-mail. Este de preferat un cont de e-mail Google. Acestea pot fi create la https://mail.google.com.
De asemenea, este necesar un cont Google Cloud Platform (GCP). O probă gratuită este disponibilă aici. Acest lucru vă oferă un credit de 300 USD, care este disponibil pentru un an. Este necesar un card de credit ca dovadă a identității. Google poate percepe 1 USD și apoi îl poate rambursa. Cardul de credit va fi debitat lunar dacă facturarea este activată și sunt utilizate resurse facturabile. Există și companii furnizori Google care acționează ca intermediari pentru facturare. Plătiți furnizorului pentru utilizarea cloud, iar ei plătesc Google. Ei au propriile planuri de facturare și pot oferi o încercare gratuită.
Este important să monitorizați frecvent secțiunea de facturare a consolei cloud pentru a monitoriza utilizarea. Este ușor să păstrați resurse precum stocarea activă atunci când nu este necesar, ceea ce poate implica costuri considerabile în timp.
Proiectele Firebase sunt, de asemenea, proiecte GCP. Puteți crea un proiect GCP și îl puteți importa în Firebase sau puteți crea un proiect Firebase, care va crea și un proiect GCP. Consola Firebase este aici.
Este necesară o configurare diferită pentru diferite tipuri de aplicații. Principalele sunt aplicațiile Android, iOS și web. Instrucțiunile de configurare pot fi găsite în Ghidurile oficiale Firebase.
Instrumentele Firebase Command Line Interface (CLI) sunt necesare pentru unele operațiuni. Acestea necesită instalarea Node.js
și a instrumentului npm
. Dacă rulați pe macOS sau Linux, comanda npm
va trebui să fie executată cu sudo
.
sudo npm install -g firebase-tools
Autentificare și autorizare
Autentificarea Firebase este poate cea mai utilizată componentă Firebase. Utilizatorii pot selecta unul sau mai multe dintre un număr de mecanisme de autentificare. Acestea sunt adresa de e-mail și parola, numerele de telefon și furnizorii de identitate federați Google, Facebook, Twitter și GitHub. Orice număr de mecanisme de autentificare poate fi activat.
Interfața de utilizare Firebase solicită utilizatorului mecanismul de utilizat:
Firebase oferă interfețe de utilizator pentru autentificare care pot fi invocate din câteva linii de cod de pe partea clientului. Există, de asemenea, API-uri pentru autentificarea manuală. La autentificarea cu succes, este generat un token de identitate care poate fi utilizat pentru validarea back-end.
API-urile permit utilizatorilor administrativi să gestioneze utilizatorii în mod programatic. Operațiunile includ:
- Crearea, actualizarea și ștergerea utilizatorilor
- Căutați utilizatori după criterii de căutare, cum ar fi adresa de e-mail sau numărul de telefon
- Accesați informații precum data creării contului și data și ora ultimei conectări
- Validați adresele de e-mail și numerele de telefon fără a fi nevoie să utilizați fluxurile de lucru existente
Majoritatea aplicațiilor mobile și web doresc ca un număr mare de utilizatori să se conecteze la aplicațiile lor. De exemplu, oricine are un cont Google Mail se poate autentifica la orice aplicație care permite autentificarea Google. Este necesară o formă de autorizare pentru a restricționa accesul la aplicație anumitor utilizatori. Acest lucru se poate face cu ușurință prin stocarea asocierilor între adresele de e-mail și rolurile de acces în stocarea datelor. La autentificarea cu succes, adresa de e-mail este căutată în stocarea datelor. Dacă utilizatorul există cu rolurile corecte, atunci accesul este acordat; în caz contrar, utilizatorul este forțat deconectat.
Gazduire Firebase
Gazduirea Firebase permite găzduirea conținutului web static, care include JavaScript, în cloud fără a fi nevoie de un server web. Conținutul este stocat în cache la marginile unei rețele globale de livrare a conținutului (CDN). Acest lucru permite accesul rapid la conținut de oriunde din lume.
Unul sau mai multe site-uri web pot fi găzduite adăugându-le la secțiunea Gazduire a unui proiect Firebase din Consola Firebase. Conținutul este livrat prin SSL și au două adrese URL ale formularului, [https://site-name.web.app] și https://site-name.firebaseapp.com, unde site-name
este fie numele proiectului, fie un numele site-ului specificat de utilizator.
Este foarte ușor să aveți site-ul găzduit de pe propriul nume de domeniu, cu condiția să puteți modifica înregistrările DNS pentru domeniu. Adăugați numele de domeniu pe un site din Consola Firebase. Apoi vi se va oferi o înregistrare DNS TXT, pe care trebuie să o adăugați la DNS-ul domeniului dvs. pentru a dovedi Google că dețineți domeniul. Odată ce înregistrarea TXT este vizibilă, puteți obține înregistrări DNS A pentru site. Un certificat SSL este furnizat automat pentru site. Odată ce certificatul a fost furnizat, site-ul este disponibil la nivel global. În principiu, poate dura câteva ore pentru actualizările DNS și furnizarea certificatelor. În practică, procesul poate fi finalizat în 20 de minute.
Pentru a adăuga conținut la găzduire, în primul rând, creați un director pentru site și cd
-ul în el din linia de comandă. Apoi, conectați-vă la Firebase și inițializați directorul proiectului.
firebase login firebase init
Vi se va solicita să selectați un proiect și ce servicii pentru clienți sunt necesare. Serviciile pot fi adăugate oricând ulterior și nu trebuie să fie selectate în această etapă.
Creați un fișier numit firebase.json
, care definește directorul rădăcină al site-ului web și fișierele de exclus. Veți avea nevoie și de un fișier .gitignore
pentru a exclude fișierele din controlul versiunilor.
{ "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }
Apoi, copiați conținutul static în directorul public. În cele din urmă, implementați site-ul în cloud.
firebase deploy
Pentru a modifica conținutul web, pur și simplu schimbați fișierele de conținut și lansați comanda deploy. Fiecare implementare apare ca o versiune pe Consola Firebase. Puteți reveni la o versiune anterioară cu un singur clic.

Firebase Hosting poate, de asemenea, rescrie URI-uri în fișiere, Cloud Functions și Cloud Run. Acest lucru simplifică foarte mult lucrurile, deoarece nu este necesar să atribuiți un domeniu acestor servicii. Rescrierile sunt definite prin adăugarea unei secțiuni de rescrieri la secțiunea de găzduire a firebase.json. Implementarea găzduirii va eșua dacă serviciul nu există.
{ "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }
Stocare a datelor
Firebase oferă API-uri client pentru accesarea stocării de date bazate pe cloud. Există trei tipuri de stocare:
- Baza de date în timp real
- Cloud Firestore
- Stocare in cloud
Acest lucru permite clienților mobili și web să stocheze și să recupereze date fără a fi nevoie de un server.
Baza de date în timp real
Realtime Database este o bază de date NoSQL găzduită în cloud. Datele din baza de date în timp real sunt sincronizate automat în timp real cu toate dispozitivele conectate. Funcționează pe mai multe platforme pentru Android, iOS și web. Datele sunt stocate ca o structură arborescentă JSON. Regulile de securitate pot fi setate pentru a controla accesul la citire și scriere la date.
Fiecare dispozitiv păstrează o copie locală a bazei de date. Aceasta înseamnă că datele sunt disponibile atunci când nu sunt conectate la rețea. La reconectare, copiile locale și cele bazate pe cloud ale datelor sunt sincronizate.
Datele sunt citite de aplicații folosind un ascultător. Un ascultător ascultă pe un nod din arborele JSON. Ori de câte ori datele sunt modificate pe consolă sau de către un alt utilizator, apelarea ascultătorului este apelată cu noua valoare a datelor. Baza de date în timp real acceptă, de asemenea, interogări. Fiecare interogare returnează un nod și toate nodurile sale secundare.
Regulile de securitate în mod implicit nu permit accesul la date. Regulile pot fi adăugate la nivel global sau la nodurile individuale ale obiectului JSON. Regulile de securitate controlează accesul de citire și scriere la date și pot efectua validarea.
Realtime Database este cel mai potrivit pentru bucăți mici de date care nu necesită o structură de date profund imbricată. Limita gratuită este de 1 GB de date.
Cloud Firestore
Cloud Firestore este văzut ca înlocuitor pentru baza de date în timp real. Acesta extinde funcționalitatea bazei de date în timp real. Datele nu se află într-un arbore JSON, ci într-o colecție ierarhică de documente. Fiecare document constă dintr-un set de perechi cheie-valoare și subdocumente opționale. Interogările permit filtrare și sortare mai complexe și returnează doar documente complete. Interogările nu returnează subdocumente.
Cloud Firestore va înlocui în curând Cloud Datastore. Poate fi rulat în modul Datastore sau în modul nativ. Toate aplicațiile Datastore vor fi migrate automat în Cloud Firestore.
Cloud Firestore este cel mai potrivit pentru bucăți de date relativ mici. Poate avea o structură de date profund imbricată. Limita gratuită este de 1 GB de date.
Stocare in cloud
Cloud Storage este pentru stocarea fișierelor precum imagini și clipuri video. Clienții de telefonie mobilă și web pot folosi Firebase pentru a încărca și descărca fișiere direct în și din cloud, fără a fi nevoie de un server back-end. Limita gratuită este de 5 GB de date.
Funcții cloud
Funcțiile cloud sunt o tehnologie importantă pentru crearea de aplicații fără server. O funcție cloud poate fi scrisă în JavaScript, TypeScript, Python sau Go, care este implementat direct în cloud-ul Google. O funcție este declanșată de o solicitare HTTP sau de un eveniment din cloud, cum ar fi scrierea în Cloud Storage.
O funcție Cloud poate gestiona o singură solicitare la un moment dat, dar cloud-ul scala automat funcția prin replicarea acesteia. O funcție Cloud scrisă în Python utilizează biblioteca Flask pentru a gestiona solicitările HTTP. Funcția ia un obiect de cerere ca parametru și returnează corpul răspunsului.
O funcție simplă Python Cloud necesită un director de lucru, iar punctul de intrare merge în fișierul main.py
.
def simple_cloud_function(request): return "It worked"
Dependențele sunt gestionate de pip și intră într-un fișier numit requirements.txt
.
Flask==1.0.2
O funcție este implementată folosind instrumentul de linie de comandă gcloud
. Specifică numele funcției, limba și declanșatorul.
gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http
Adresa URL a funcției este afișată la implementare și poate fi găsită rulând comanda descrie.
gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function
Cloud Functions poate apela API-urile Google Cloud și Firebase pentru a oferi funcționalitate back-end. Acestea oferă informații de înregistrare despre pornirea execuției și timpul de execuție. Înregistrări suplimentare pot fi adăugate cu ușurință. Jurnalele pot fi vizualizate în interfața de utilizare Stackdriver Logging și prin instrumentul de linie de comandă gcloud
.
gcloud functions logs read simple_cloud_function
Funcțiile pot fi vizualizate și șterse în Google Cloud Console.
Funcțiile cloud sunt utilizate cel mai bine pentru operațiuni care au loc relativ rar. Un exemplu de utilizare este crearea unei miniaturi atunci când o imagine este încărcată în Cloud Storage. Limita gratuită este de 125.000 de invocări pe lună.
Cloud Run
Cloud Run este o funcționalitate adăugată recent care facilitează foarte mult aplicațiile fără server. Permite rularea containerelor Docker în cloud fără a fi nevoie să faceți o configurare complexă a infrastructurii. Poate rula în modul gestionat, care utilizează Knative runtime, care este construit pe Kubernetes. Poate rula și pe Anthos, care este, de asemenea, construit pe Kubernetes, dar permite rularea containerelor în nori și chiar în propriul centru de date. Nu este nevoie să configurați și să gestionați un cluster Kubernetes, deoarece totul se face automat.
Orice aplicație care poate fi încorporată în imaginile Docker poate fi gestionată de Cloud Run. Crește automat numărul de containere în funcție de cerere. De asemenea, scade la zero atunci când serviciul nu este utilizat. Serviciile neutilizate nu implică taxe.
Containerele Docker trebuie să ruleze un server web dacă doresc să răspundă la solicitările HTTP. Serviciul Python va folosi Flask. Punctul de intrare va fi în app.py
.
from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page
Aplicația are nevoie de un Dockerfile
pentru a crea imaginea.
FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app
Containerele Cloud Run sunt implementate direct în cloud.
gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated
Dacă numele serviciului, platforma, regiunea sau dacă se permite neautentificarea nu sunt definite în configurația proiectului sau furnizate pe linia de comandă, acestea vor fi solicitate. Odată ce implementarea este finalizată, va fi afișată adresa URL a serviciului. Adresa URL poate fi obținută și folosind comanda gcloud.
gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z
Adresa URL conține un număr aleatoriu greu de gestionat. Aici devin cele mai utile regulile de rescriere Firebase Hosting.
Serviciile pot fi vizualizate și șterse în Google Cloud Console.
Cloud Run este ideal pentru găzduirea unui API REST. Limitele lunare gratuite sunt de 180.000 de secunde CPU, 360.000 GB de secunde de memorie, 2 milioane de solicitări și 1 GB de ieșire din rețea. Limita de ieșire gratuită a rețelei se aplică numai dacă serviciul este implementat într-o regiune din America de Nord.
Autentificare
În mod implicit, containerele Cloud Functions și Cloud Run sunt publice și pot fi accesate de oricine de pe internet. Folosind regulile IAM din Cloud Console, serviciile pot fi restricționate la membrii proiectului, grupurile Google și adresele de e-mail individuale.
Dacă există restricții, accesul neautorizat este interzis. Pentru a permite accesul, un jeton de identitate trebuie adăugat la antetele cererii. Indicatorul de identitate poate fi obținut folosind comanda gcloud sau în timpul procesului de autentificare Firebase.
gcloud auth print-identity-token
Este necesar un antet de autorizare.
Authorization: Bearer id-token
rezumat
Google Cloud Platform și Firebase oferă o gamă de produse care facilitează foarte mult dezvoltarea de aplicații mobile și web. Necesitatea unui server back-end poate fi eliminată complet, permițând clienților să acceseze funcționalitatea cloud direct sau prin implementarea codului back-end în cloud folosind Cloud Functions sau Cloud Run.
Aplicațiile existente pot fi migrate în mod incremental către serverless. De fapt, modul în care evoluează tehnologia ar putea însemna că soluțiile tradiționale de server bazate pe mașini virtuale nu vor mai fi necesare.