Bygg APIer med Firebase: En komplett guide

Introduksjon til Firebase: En omfattende plattform for applikasjonsutvikling

Firebase ble lansert i 2012, og ble to år senere overtatt av Google. Opprinnelig var Firebase tenkt som en database for sanntidsapplikasjoner, men Google så et større potensial og utvidet plattformen med flere tjenester.

I dag er Firebase et BaaS-system (backend as a service) med hele 18 tjenester, designet for å forenkle utviklingen av både web- og mobilapplikasjoner. Blant de mange selskapene som benytter seg av Firebases BaaS-tjenester, finner vi kjente navn som Accenture, Alibaba Travels, Stack, Twitch og Instacart, i tillegg til over 2300 andre virksomheter.

Hva er fordelene med Firebase?

Sanntidsdatabasen var den første tjenesten Firebase tilbød, og den er fortsatt en av de mest attraktive funksjonene. Disse databasene er plassert i skyen og lagrer data i JSON-format. Data synkroniseres i sanntid med alle tilkoblede klienter. Uansett om man benytter iOS SDK, Android SDK eller JavaScript SDK, vil alle applikasjoner koblet til en Firebase Realtime-database dele én felles databaseforekomst, som alltid er oppdatert med de nyeste dataene.

Cloud Firestore er en annen viktig tjeneste fra Firebase. Dette er en NoSQL-dokumentdatabase som er utviklet for å forenkle lagring, synkronisering og spørring av data for mobil- og webapplikasjoner i global skala. Med Cloud Firestore kan man organisere relaterte data i hierarkier, og benytte kraftfulle spørringer for å hente data. Søk skalerer basert på resultatstørrelse, ikke datamengde, noe som gjør at applikasjoner kan skaleres umiddelbart uten å måtte vente til kapasitetsgrensen er nådd.

I tillegg til de ovennevnte databasetjenestene, tilbyr Firebase også hostingtjenester, fillagring og serverløse funksjoner (lignende AWS Lambda), samt mye mer.

Hvordan skape en API med Firebase

APIer gir en måte for egne eller tredjeparts applikasjoner å benytte seg av tjenester. Firebase lar deg tilby egendefinerte tjenester som bruker Firebases egne tjenester, uten behov for en egen backend-infrastruktur. Du kan for eksempel gi tredjepartsapplikasjoner tilgang til en Firebase-sanntidsdatabase for å hente data fra industrielle sensorer.

For å opprette en API i Firebase, må du først gå til Firebase-konsollen. Der oppretter du et nytt prosjekt ved å klikke på «Legg til prosjekt» og gi det et navn. Du vil også få muligheten til å aktivere Google Analytics for prosjektet, noe som anbefales for å dra nytte av A/B-testing og omfattende statistiske rapporter for API-en din.

Etter at prosjektet er opprettet, kan du velge hvilke Firebase-tjenester API-en skal benytte. For å illustrere dette, ser vi på hvordan man bruker Firebase Realtime-databasetjenesten.

Konfigurering av en sanntidsdatabase i Firebase

I navigasjonsmenyen på venstre side, under «Utvikle», klikker du på «Sanntidsdatabase». En «Opprett database»-knapp vil vises. Klikk på denne for å opprette din første database i Firebase.

Deretter velger du en geografisk plassering for databasen. Det er viktig å velge en plassering som er nærme brukerne for å minimere ventetid, spesielt i sanntidsapplikasjoner.

Neste steg er å konfigurere sikkerhetsreglene for databasen. Du kan velge en låst modus og deretter tildele tilgangstillatelser etter behov, eller en testmodus som tillater all lesing og skriving.

Det anbefales å starte med testmodusen for å forenkle sikkerhetsinnstillingene i begynnelsen. Du kan senere opprette mer detaljerte sikkerhetsregler.

Etter at databasen er konfigurert, vil den tilhørende API-en også aktiveres i «API-er og tjenester»-seksjonen i Google Cloud Platform-konsollen.

Programmering av Firebase API

Nå som grunnleggende elementer er konfigurert i Firebase-konsollen, er neste steg å skrive selve API-koden. For å gjøre dette må du initialisere Firebase-verktøyene og funksjonene på din lokale datamaskin. Du kan installere Firebase-verktøy ved hjelp av npm:

npm install -g firebase-tools

Deretter kan du logge inn på Firebase og initialisere prosjektet med følgende kommandoer:

firebase login firebase init

Et velkomstbilde vil vise mappen der prosjektet initialiseres, og en meny med alternativer vil vises.

I denne menyen velger du «Funksjoner» og «Hosting» (hosting-alternativet gir en tilpasset URL for API-en). Velg så Firebase-appen du opprettet tidligere, og deretter språket du vil bruke. For å utvikle en web-API kan JavaScript være et godt valg.

Hvis du trenger eksterne pakker, installer dem med npm inne i funksjonsmappen. Du kan deretter begynne å skrive koden for dine funksjoner. Husk å inkludere firebase-functions og firebase-admin, i tillegg til eventuelle andre pakker du trenger:

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

For å benytte sanntidsdatabasen, må du spesifisere URL-adressen når du initialiserer JavaScript SDK-en. Denne URL-en finner du i Realtime Database-seksjonen i Firebase-konsollen, og den har formatet:

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

Bruk følgende kode for å initialisere SDK-en, og erstatt dataene med konfigurasjonsobjektet til ditt prosjekt:

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

Når API-funksjonen er ferdig kodet, er det på tide å distribuere den. Før du gjør det, må du gjøre noen endringer i firebase.json, og legge til følgende linjer, tilpasset prosjektets konfigurasjon:

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

Neste steg er selve distribusjonen. Første gang må du utføre en fullstendig distribusjon med kommandoen:

firebase deploy

Ved senere distribusjoner kan du kun distribuere funksjonene ved å bruke parameteren «–only functions».

Etter at distribusjonen er fullført, vil Firebase CLI vise URL-en til HTTP-endepunktene for funksjonene i terminalen. Denne URL-en inneholder prosjekt-ID-en og regionen for HTTP-funksjonen. For eksempel kan følgende URL brukes for å kalle en varespørringsfunksjon med parameteren «itemid=1»:

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

Du kan teste funksjonen ved å åpne URL-en med de nødvendige parameterne i nettleseren.

Merk at distribusjon til produksjonsmiljøet krever et Firebase Blaze-abonnement (betal etter bruk), som du finner mer informasjon om på Firebases pris-side. Dette er en etterfaktureringstjeneste, noe som betyr at du faktureres i slutten av hver måned basert på bruken.

Hvis du ikke har et Blaze-abonnement, vil ikke distribusjonskommandoen vise API-URL-en. I stedet vil du få en melding om at du må abonnere på Blaze-planen for å distribuere til produksjonsmiljøet. I dette tilfellet kan du benytte Firebase Local Emulation Suite for å bygge og teste applikasjonen lokalt, i stedet for å distribuere til produksjonsmiljøet. Lokal testing er nyttig for å unngå unødvendige kostnader under utviklingen, ettersom hver testkjøring kan generere kostnader.

Lokal testing og prototyping

Local Emulator Suite tilbyr et integrert brukergrensesnitt som forenkler prototyping og testing av applikasjonene dine lokalt.

Med Emulator Suite kan du teste databasedesign, Cloud Functions-arbeidsflyter, analysere ytelsen til backend-tjenester, og evaluere endringer i sikkerhetsregler. Det er en sikker sandkasse for å teste API-funksjonaliteten før den distribueres til produksjon.

For å emulere funksjonene lokalt, bruk kommandoen «firebase emulators:start». Du trenger Java installert for å kunne bruke Firestore Emulator. Hvis du ikke har Java, kan du laste det ned her.

Når Firestore Emulator starter, vil kommandoen returnere en URL som åpner Emulator Suite i nettleseren. Standardadressen er «localhost:4000», men den kan variere.

Du vil også få en fullstendig URL for HTTP-funksjonen din, som vil ligne på:

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

Denne vil ha ditt prosjektnavn, funksjonsnavn og muligens et annet portnummer.

Kopier URL-en fra emulatoren, legg til nødvendige parametere (f.eks. «?itemid=1»), og lim den inn i en ny fane i nettleseren. Resultatene av API-kjøringen vil vises i Emulator Suite.

I Logger-fanen vil du se logger som viser at itemQuery()-funksjonen ble utført. Hvis funksjonen genererer nye data i Firestore-databasen, vil du se det i Firestore-fanen.

Øk synligheten for din API

Firebase kan også hjelpe deg med å gjøre din API populær. Ikke bare fordi det fremskynder utviklingen av applikasjonen ved å håndtere backend-tjenester, men også ved å hjelpe med produktposisjoneringen. Dette er mulig fordi applikasjoner som er tilknyttet Firebase ofte rangerer bedre i søk.

I tillegg bør du også vurdere Firebases appindekserings-API. Dette verktøyet forbedrer søkerangeringen for applenker og hjelper brukere med å finne innholdet de leter etter. Den plasserer også en «Installer»-knapp ved siden av appens startsideknapp, slik at interesserte brukere lett kan laste ned appen.

Konklusjonen er at Firebase ikke bare tilbyr backend-tjenester som drastisk reduserer utviklingstiden for API-en, men også hjelper deg med markedsføring og tjening etter at API-en er lansert.