Како успешно изградити АПИ са Фиребасе-ом?

Firebase je platforma namenjena razvoju aplikacija, lansirana 2012. godine, a dve godine kasnije preuzeta od strane kompanije Google. U početnoj fazi, Firebase je bio prepoznat isključivo kao baza podataka za aplikacije u realnom vremenu. Međutim, Google je uvideo njegov širi potencijal i odlučio da ga obogati dodatnim uslugama.

Danas, Firebase funkcioniše kao BaaS (backend as a service) sistem, nudeći paletu od 18 različitih usluga koje znatno olakšavaju proces kreiranja web i mobilnih aplikacija. Neke od istaknutih kompanija koje koriste Firebase BaaS usluge uključuju Accenture, Alibaba Travels, Stack, Twitch i Instacart, pored više od 2.300 drugih.

Prednosti korišćenja Firebase-a

Prva usluga koju je Firebase ponudio bila je njegova baza podataka u realnom vremenu, koja i dalje ostaje jedna od ključnih prednosti ove platforme. Firebase baze podataka u realnom vremenu smeštene su u oblaku, čuvaju informacije u JSON formatu i sinhronizuju se u realnom vremenu sa svim klijentima koji su povezani na njih. Bez obzira da li koristite iOS SDK, Android SDK ili JavaScript SDK, sve aplikacije koje su povezane sa Firebase Realtime bazom podataka dele jednu instancu baze, koja je uvek ažurirana najnovijim podacima.

Cloud Firestore je još jedna značajna usluga koju nudi Firebase. Reč je o NoSQL bazi podataka dokumenata, osmišljenoj da pojednostavi skladištenje podataka, sinhronizaciju i upite za mobilne i web aplikacije na globalnom nivou. Mogućnost kreiranja hijerarhija za skladištenje povezanih informacija i izražajni upiti za preuzimanje podataka omogućavaju punu iskorišćenost potencijala Cloud Firestore-a. Takođe, upiti se skaliraju prema veličini rezultata, a ne prema obimu skupa podataka. To omogućava aplikacijama da rastu od samog početka, bez čekanja na trenutak kada potrebe prevaziđu kapacitete.

Pored navedenih usluga baza podataka, Firebase pruža i usluge hostinga, skladištenja datoteka, funkcija (slično AWS Lambda stilu) i mnoge druge mogućnosti.

Kreiranje API-ja

API-ji (Application Programming Interfaces) su ključni za pružanje usluga koje mogu koristiti kako vaše aplikacije, tako i aplikacije trećih strana. Firebase vam omogućava da kreirate prilagođene usluge koje, zauzvrat, koriste Firebase-ove sopstvene servise bez potrebe za komplikovanim podešavanjem pozadinskog dela za te usluge. Na primer, možete omogućiti pristup Firebase real-time bazi podataka za aplikacije trećih strana koje prikupljaju informacije sa industrijskih senzora.

Prvi korak u kreiranju API-ja na Firebase-u je pristup Firebase konzoli i dodavanje novog projekta klikom na „Dodaj projekat“. Google će vam ponuditi opciju da omogućite Google Analytics za vaš novi projekat. Preporučuje se da prihvatite ovu preporuku, jer ćete time dobiti A/B testiranje i širok spektar statističkih izveštaja koji mogu biti korisni za vaš API.

Nakon kreiranja projekta, možete izabrati Firebase usluge koje će vaš API koristiti. Kao primer, pokazaćemo kako se koristi usluga Firebase Realtime baze podataka.

Podešavanje baze podataka u realnom vremenu u Firebase-u

U navigacionoj traci sa leve strane, unutar odeljka „Develop“, kliknite na „Realtime Database“. Sa desne strane će se pojaviti dugme „Kreiraj bazu podataka“. Kliknite na njega da kreirate vašu prvu bazu podataka u Firebase-u.

Zatim ćete morati da izaberete geografsku lokaciju za vašu novu bazu podataka. Izaberite lokaciju koja je najbliža vašim korisnicima, što je ključno za smanjenje kašnjenja vašeg API-ja, posebno kod aplikacija u realnom vremenu.

Sledeći korak je konfigurisanje osnovnih bezbednosnih pravila za vašu bazu podataka. Možete izabrati zaključani režim, i dodeljivati dozvole za pristup po potrebi, ili testni režim koji omogućava sva čitanja i pisanja.

Možete početi sa testnim režimom kako biste izbegli komplikacije oko podešavanja bezbednosti na početku. Kasnije uvek možete kreirati pravila za detaljniju bezbednosnu konfiguraciju.

Nakon konfigurisanja baze podataka, odgovarajući API će automatski biti omogućen u odeljku „API-ji i usluge“ u vašoj ličnoj konzoli na Google Cloud Platformi.

Programiranje Firebase API-ja

U ovom trenutku, svi osnovni elementi vašeg projekta su konfigurisani u Firebase konzoli. Sledeći korak je pisanje API koda. Za to, potrebno je da inicijalizujete Firebase hosting i funkcije na vašem lokalnom računaru. Možete instalirati firebase-tools koristeći npm:

npm install -g firebase-tools

Zatim se možete prijaviti na Firebase i inicijalizovati vaš projekat pomoću sledećih komandi:

firebase login firebase init

Prikazaće se ekran dobrodošlice gde će vas Firebase informisati o fascikli u kojoj će vaš projekat biti inicijalizovan. Pojaviće se i meni sa opcijama.

U meniju izaberite opcije „Functions“ i „Hosting“ (opcija „Hosting“ će vam omogućiti da dobijete prilagođeni URL za API koji razvijate). Zatim izaberite Firebase aplikaciju koju ste ranije kreirali, i jezik koji ćete koristiti. Za razvoj web API-ja, možete odabrati JavaScript.

Ako koristite zavisnosti od paketa, instalirajte ih pomoću npm-a unutar fascikle sa funkcijama. Nakon toga, možete početi sa pisanjem koda za vaše funkcije. Obavezno uključite firebase-functions i firebase-admin pakete, kao i sve ostale potrebne pakete:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

Za korišćenje baze podataka u realnom vremenu, potrebno je da navedete njen URL prilikom inicijalizacije vašeg JavaScript SDK. URL možete pronaći u odeljku „Realtime Database“ u Firebase konzoli. Prepoznaje se po sledećem formatu:

https://<database-name>.<region>.firebasedatabase.app

Možete koristiti sledeći fragment koda za inicijalizaciju vašeg SDK, zamenjujući podatke koji odgovaraju konfiguracionom objektu vašeg projekta:

var config = {
  apiKey: "apiKey",
  authDomain: "projectId.firebaseapp.com",
  databaseURL: "https://databaseName.firebaseio.com",
  storageBucket: "bucket.appspot.com"
};
firebase.initializeApp(config);
var database = firebase.database();

Nakon što napišete kod za svoju API funkciju, vreme je za implementaciju. Pre toga, potrebno je napraviti izmene u firebase.json, dodajući sledeće redove (prilagođene konfiguraciji vašeg projekta):

"rewrites": [
     {
       "source": "/api/v1/**",
       "function": "webApi"
     }
]

Sledeći korak je raspoređivanje. Prvi put je potrebno izvršiti kompletno raspoređivanje pomoću naredbe:

firebase deploy

U narednim implementacijama, možete raspoređivati samo funkcije, koristeći parametar –only functions.

Nakon izvršavanja komande deploy, Firebase CLI prikazuje URL HTTP krajnjih tačaka vaših funkcija u terminalu, koje možete koristiti za pozivanje vašeg API-ja iz web aplikacije. URL sadrži ID vašeg projekta i region za HTTP funkciju. Na primer, sledeća URL adresa se može koristiti za pozivanje funkcije upita stavke uz prosljeđivanje itemid=1 kao parametra:

https://us-central1-apiproject-8753c.cloudfunctions.net/itemQuery?itemid=1

Da biste izvršili funkciju, otvorite URL sa odgovarajućim parametrima u pretraživaču.

Važno je napomenuti da je za implementaciju u produkciono okruženje potrebna pretplata na Firebase Blaze plan, koji se naplaćuje prema cenama navedenim na Firebase stranici. Usluga se naplaćuje na kraju svakog meseca, prema korišćenju.

Ako nemate Blaze pretplatu, naredba deploy neće prikazati vaš API URL. Umesto toga, dobićete poruku da je za implementaciju u okruženje za izvršavanje potrebna pretplata na Blaze plan. U tom slučaju, možete koristiti Firebase Local Emulation Suite za kreiranje i testiranje aplikacija na vašoj lokalnoj mašini, umesto da ih implementirate u Firebase produkciono okruženje. Lokalno testiranje je korisno kako biste izbegli nepotrebne troškove tokom razvoja aplikacije, jer svako testiranje može generisati troškove na vašem nalogu.

Lokalno testiranje i izrada prototipa

Local Emulator Suite pruža integrisani korisnički interfejs koji olakšava izradu prototipova i testiranje vaših aplikacija na lokalnoj mašini.

Pomoću korisničkog interfejsa Emulator Suite-a možete testirati svoje baze podataka, tokove rada Cloud funkcija, analizirati performanse pozadinskih servisa i procenjivati izmene u bezbednosnim pravilima, između ostalih zadataka. To je bezbedno okruženje za testiranje vaše API funkcionalnosti pre slanja u produkciono okruženje.

Za emulaciju funkcija ili lokalno testiranje aplikacije, pokrenite firebase emulators:start. Za korišćenje Firestore emulatora morate imati instaliranu Javu. Možete je instalirati sa ove adrese.

Kada pokrenete Firestore Emulator, komanda će vratiti URL koji vam omogućava da otvorite korisnički interfejs Emulator Suite u vašem pregledaču. Po default-u, ovaj URL će biti localhost:4000, ali se može razlikovati na različitim mašinama.

Takođe ćete dobiti punu URL adresu za vašu HTTP funkciju. Ona će izgledati slično:

http://localhost:5001/apiproject-8753c/us-central1/itemQuery

samo će sadržati ime vašeg projekta, ime funkcije, i može imati drugačiji broj porta na vašoj lokalnoj mašini.

Za testiranje funkcije, kopirajte URL koji je vratio emulator, dodajući potrebne parametre (npr. ?itemid=1) i unesite ga u novu karticu pretraživača. Rezultati izvršavanja API-ja će se prikazati u korisničkom interfejsu paketa emulatora.

Na kartici „Dnevnici“ videćete nove zapise koji pokazuju da je funkcija itemQuery() izvršena. Ako vaša funkcija generiše nove podatke u vašoj Firestore bazi podataka, videćete ih na kartici „Firestore“.

Povećanje vidljivosti za vaš API

Ako želite da API-ji koje razvijate postanu popularni, Firebase vam može pomoći u tome. Ne samo što vam omogućava bržu izradu aplikacija, već vam pomaže i u pozicioniranju vašeg proizvoda. Aplikacije povezane sa Firebase-om se bolje rangiraju u pretrazi u odnosu na druge aplikacije.

Uz to, razmislite o Firebase API-ju za indeksiranje aplikacija. Ovaj alat poboljšava rangiranje linkova aplikacija i pomaže korisnicima da pronađu željeni sadržaj. Takođe postavlja dugme „Instaliraj“ na početnoj stranici vaše aplikacije, tako da su zainteresovani korisnici na jedan klik od toga da postanu korisnici vaše aplikacije.

Zaključno, Firebase ne nudi samo pozadinske usluge koje ubrzavaju razvoj API-ja, već i pomaže u promociji – i zaradu, nakon što je vaš proizvod lansiran i predstavljen svetu.