Jak pomyślnie zbudować interfejs API za pomocą Firebase?

Firebase to platforma do tworzenia aplikacji, która zadebiutowała w 2012 roku, a dwa lata później została przejęta przez firmę Google. Początkowo, Firebase stanowiła wyłącznie bazę danych dedykowaną aplikacjom działającym w czasie rzeczywistym. Jednak Google, dostrzegając w niej ogromny potencjał, postanowiło rozbudować ją o szereg dodatkowych usług.

Współcześnie, Firebase funkcjonuje jako system BaaS (backend as a service), oferujący 18 różnorodnych narzędzi, które znacznie ułatwiają proces tworzenia aplikacji internetowych oraz mobilnych. Z usług BaaS Firebase korzysta wiele renomowanych firm, m.in. Accenture, Alibaba Travels, Stack, Twitch, Instacart, a także ponad 2300 innych przedsiębiorstw.

Korzyści płynące z zastosowania Firebase

Pierwszą usługą udostępnioną przez Firebase była baza danych czasu rzeczywistego, która do dziś pozostaje jedną z jej kluczowych zalet. Bazy danych Firebase Realtime, działające w chmurze, przechowują dane w formacie JSON i synchronizują się w czasie rzeczywistym z każdym podłączonym klientem. Niezależnie od tego, czy używasz pakietu iOS SDK, Android SDK, czy JavaScript SDK, wszystkie aplikacje połączone z bazą danych Firebase Realtime współdzielą tę samą instancję bazy, zapewniając aktualność danych.

Cloud Firestore to kolejna, niezwykle interesująca usługa w ramach Firebase. Jest to baza danych dokumentów NoSQL, zaprojektowana z myślą o łatwym przechowywaniu, synchronizacji i wykonywaniu zapytań w aplikacjach mobilnych i internetowych o zasięgu globalnym. Możliwość tworzenia hierarchii do przechowywania powiązanych danych oraz zaawansowane opcje zapytań pozwalają w pełni wykorzystać potencjał Cloud Firestore. Co ważne, zapytania skalują się w zależności od liczby wyników, a nie od wielkości całego zbioru danych. Dzięki temu, aplikacje mogą być skalowane od samego początku, bez obawy o przekroczenie pojemności bazy.

Poza wymienionymi usługami bazodanowymi, Firebase oferuje również usługi hostingowe, przechowywanie plików, funkcje (podobne do AWS Lambda), i wiele innych.

Tworzenie API

Interfejsy API to narzędzia umożliwiające świadczenie usług, z których mogą korzystać zarówno Twoje, jak i zewnętrzne aplikacje. Firebase pozwala na oferowanie niestandardowych usług, które korzystają z własnych zasobów platformy, bez konieczności konfigurowania dodatkowej infrastruktury zaplecza. Przykładowo, możesz udostępnić dostęp do bazy danych Firebase w czasie rzeczywistym dla zewnętrznej aplikacji, umożliwiając jej pobieranie informacji zgromadzonych przez czujniki przemysłowe.

Pierwszym krokiem w procesie tworzenia API w Firebase jest uzyskanie dostępu do Konsoli Firebase, a następnie dodanie nowego projektu. W ramach tego procesu, Google zasugeruje Ci włączenie Google Analytics dla nowego projektu. Rekomenduje się zaakceptowanie tej sugestii, gdyż pozwoli to na wykorzystanie testów A/B oraz szerokiego zakresu raportów statystycznych generowanych na bazie Twojego interfejsu API.

Po utworzeniu projektu, możesz wybrać usługi Firebase, z których będzie korzystał Twój interfejs API. Dla przykładu, prześledzimy proces konfiguracji bazy danych Firebase Realtime.

Konfiguracja bazy danych czasu rzeczywistego w Firebase

W panelu nawigacyjnym po lewej stronie, w sekcji „Rozwijaj”, odszukaj opcję „Baza danych czasu rzeczywistego”. Po prawej stronie ekranu pojawi się przycisk „Utwórz bazę danych”. Kliknij go, aby rozpocząć proces tworzenia nowej bazy.

Kolejnym krokiem będzie wybór lokalizacji geograficznej dla nowej bazy danych. Wybierz tę, która znajduje się najbliżej Twoich docelowych użytkowników. Ma to kluczowe znaczenie dla minimalizacji opóźnień interfejsu API, szczególnie w przypadku aplikacji działających w czasie rzeczywistym.

Następnie, należy skonfigurować podstawowe zasady bezpieczeństwa dla bazy danych. Możesz wybrać tryb zablokowany, w którym uprawnienia dostępu będą przyznawane ręcznie, lub tryb testowy, umożliwiający wszystkim odczyt i zapis.

W początkowej fazie, zaleca się rozpoczęcie od trybu testowego, aby uniknąć nadmiernej komplikacji ustawień bezpieczeństwa. W późniejszym etapie, zawsze istnieje możliwość dostosowania reguł bezpieczeństwa, aby precyzyjnie określić uprawnienia.

Po zakończeniu konfiguracji bazy danych, odpowiedni interfejs API zostanie również włączony w sekcji interfejsów API i usług Twojej konsoli osobistej w Google Cloud Platform.

Programowanie interfejsu Firebase API

W tym momencie masz już skonfigurowane kluczowe elementy swojego projektu w konsoli Firebase. Teraz, nadszedł czas na napisanie kodu API. W tym celu, niezbędna będzie inicjalizacja hostingu i funkcji Firebase na Twoim komputerze. Narzędzia Firebase można zainstalować za pomocą npm:

npm install -g firebase-tools

Następnie, możesz zalogować się do Firebase i zainicjować projekt za pomocą następujących poleceń:

firebase login firebase init

Zostanie wyświetlony ekran powitalny, w którym Firebase poinformuje Cię o lokalizacji folderu, w którym zostanie zainicjowany Twój projekt. Pojawi się także menu opcji.

W tym menu, wybierz opcję „Funkcje i hosting” (hosting umożliwi Ci uzyskanie niestandardowego adresu URL dla tworzonego API). Następnie wybierz z listy wcześniej utworzoną aplikację Firebase. W kolejnym kroku, będziesz musiał wybrać język, którego chcesz używać. Do tworzenia internetowego interfejsu API, możesz wybrać JavaScript.

Jeśli korzystasz z zależności pakietów, zainstaluj je za pomocą npm w folderze „functions”. Następnie możesz rozpocząć pisanie kodu swoich funkcji. Pamiętaj o dołączeniu pakietów „firebase-functions” i „firebase-admin” oraz innych, potrzebnych pakietów:

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

Aby korzystać z bazy danych czasu rzeczywistego, musisz określić jej adres URL podczas inicjalizacji pakietu JavaScript SDK. Adres URL znajduje się w sekcji „Baza danych czasu rzeczywistego” w konsoli Firebase. Rozpoznasz go po następującym formacie:

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

Użyj poniższego fragmentu kodu, aby zainicjować SDK, podmieniając dane zgodnie z konfiguracją Twojego projektu:

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

Po napisaniu kodu funkcji API, czas na wdrożenie. Przed jego wykonaniem, niezbędne będzie wprowadzenie zmian w pliku „firebase.json”, dodając poniższe linie, zmodyfikowane zgodnie z konfiguracją Twojego projektu:

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

Następnym krokiem jest wdrożenie. Pierwsze wdrożenie wymaga użycia polecenia:

firebase deploy

W kolejnych wdrożeniach, możliwe jest wdrażanie jedynie funkcji, z wykorzystaniem parametru „–only functions”.

Po wykonaniu polecenia deploy, Firebase CLI wyświetli adresy URL punktów końcowych HTTP Twoich funkcji w terminalu, które możesz wykorzystać do wywołania interfejsów API z aplikacji internetowej. Adres URL zawiera identyfikator projektu i region funkcji HTTP. Przykładowo, do wywołania funkcji zapytania o element możesz wykorzystać następujący adres URL, przekazując jako parametr „itemid=1”:

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

Aby wywołać funkcję, otwórz adres URL z odpowiednimi parametrami w przeglądarce.

Pamiętaj, że wdrożenie w środowisku produkcyjnym wymaga subskrypcji planu Firebase Blaze, który jest płatny zgodnie z rzeczywistym wykorzystaniem, zgodnie z informacjami zawartymi w cenniku Firebase. Jest to usługa „post-paid”, co oznacza, że opłaty za użycie są naliczane na koniec każdego miesiąca.

W przypadku braku subskrypcji Blaze, polecenie wdrożenia nie wyświetli adresu URL interfejsu API. Zamiast tego, zostanie wyświetlony komunikat informujący o konieczności subskrybowania planu Blaze, jeżeli chcesz wdrożyć aplikację w środowisku wykonawczym. W takiej sytuacji, nadal możesz wykorzystać pakiet Firebase Local Emulation Suite do tworzenia i testowania aplikacji lokalnie na komputerze, bez konieczności wdrażania ich w środowisku produkcyjnym Firebase. Lokalny proces testowania jest bardzo użyteczny, ponieważ pozwala uniknąć niepotrzebnych kosztów związanych z testowaniem na środowisku produkcyjnym.

Lokalne testowanie i prototypowanie

Pakiet Local Emulator Suite oferuje zintegrowany interfejs użytkownika, który upraszcza proces prototypowania i testowania aplikacji na komputerze lokalnym.

Dzięki interfejsowi użytkownika Emulator Suite, możesz testować projekty baz danych, przepływy pracy Cloud Functions, analizować wydajność usług zaplecza oraz sprawdzać zmiany w regułach bezpieczeństwa. Jest to bezpieczne środowisko testowe, w którym można przetestować funkcjonalności API przed ich wdrożeniem w środowisku produkcyjnym.

Aby emulować funkcje lub przetestować aplikację lokalnie, uruchom emulator za pomocą polecenia: „firebase:start”. Aby skorzystać z emulatora Firestore, niezbędna jest instalacja Javy. Jeśli jej nie masz, możesz ją pobrać z tej strony.

Po wywołaniu emulatora Firestore, polecenie zwróci adres URL umożliwiający otwarcie interfejsu użytkownika w przeglądarce. Domyślnie, adres URL to „localhost:4000”, lecz może się różnić w zależności od konfiguracji komputera.

Otrzymasz również pełny adres URL funkcji HTTP. Adres ten będzie miał formę zbliżoną do:

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

Jednakże będzie zawierał nazwę Twojego projektu, nazwę funkcji, a także może mieć inny numer portu na Twoim komputerze.

Aby przetestować funkcję, skopiuj adres URL zwrócony przez emulator, dodaj wszelkie niezbędne parametry (np. „?itemid=1”) i wklej go w nowej karcie przeglądarki. Wyniki wykonania API pojawią się w interfejsie użytkownika pakietu emulatorów.

W zakładce „Logs” znajdziesz nowe wpisy, informujące o tym, że funkcja „itemQuery()” została wywołana. Jeśli Twoja funkcja generuje nowe dane w bazie Firestore, zobaczysz je w zakładce „Firestore”.

Zwiększanie widoczności Twojego API

Jeśli zależy Ci na popularyzacji tworzonych przez Ciebie interfejsów API, Firebase może Ci w tym pomóc. Platforma nie tylko przyspiesza proces tworzenia aplikacji dzięki eliminacji konieczności konfigurowania i utrzymywania backendu, ale również wspiera pozycjonowanie produktu. Dzieje się tak, ponieważ aplikacje powiązane z Firebase osiągają lepsze pozycje w wynikach wyszukiwania.

Warto również zwrócić uwagę na interfejs API indeksowania aplikacji Firebase. To narzędzie poprawia pozycje w wynikach wyszukiwania dla linków do Twojej aplikacji, pomagając użytkownikom w dotarciu do poszukiwanych treści. Dodatkowo, umieszcza przycisk „Zainstaluj” obok strony domowej Twojej aplikacji, dzięki czemu potencjalni użytkownicy mogą zainstalować ją jednym kliknięciem.

Podsumowując, Firebase nie tylko dostarcza narzędzia backendowe, które znacząco przyspieszają proces tworzenia Twojego interfejsu API, ale również wspomaga jego promocję, a tym samym przyczynia się do wzrostu zysków.