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

Firebase to platforma do tworzenia aplikacji uruchomiona w 2012 roku i przejęta przez Google dwa lata później. Na początku Firebase był pomyślany tylko jako baza danych dla aplikacji czasu rzeczywistego, ale Google dostrzegło jego potencjał i zdecydowało się dodać do niego dodatkowe usługi.

Obecnie Firebase to system BaaS (backend as a service) z 18 usługami ułatwiającymi tworzenie aplikacji webowych i mobilnych. Wśród firm korzystających z usług BaaS Firebase są Accenture, Alibaba Travels, Stack, Twitch i Instacart, a także ponad 2300 innych.

Korzyści z używania Firebase

Pierwszą z oferowanych przez Firebase usług była baza danych czasu rzeczywistego, która pozostaje jedną z największych atrakcji. Bazy danych Firebase Real-time są hostowane w chmurze, przechowując dane w formacie JSON i synchronizując się w czasie rzeczywistym z każdym podłączonym do nich klientem. Niezależnie od tego, czy korzystasz z pakietu iOS SDK, Android SDK czy JavaScript SDK, wszystkie aplikacje połączone z bazą danych Firebase Realtime współużytkują jedną instancję bazy danych, zawsze na bieżąco z najnowszymi danymi.

Cloud Firestore to kolejna interesująca usługa Firebase. Jest to baza danych dokumentów NoSQL zaprojektowana w celu ułatwienia przechowywania danych, synchronizacji i zapytań dla aplikacji mobilnych i internetowych w skali globalnej. Tworzenie hierarchii do przechowywania powiązanych danych oraz ekspresywne zapytania do pobierania danych pozwalają w pełni wykorzystać potencjał Cloud Firestore. Z kolei zapytania skalują się na podstawie rozmiaru wyników, a nie rozmiaru zestawu danych. Pozwala to na skalowanie aplikacji od początku bez czekania do momentu, w którym potrzeby przekroczą pojemność.

Oprócz wyżej wymienionych usług bazodanowych Firebase oferuje również usługi hostingowe, przechowywanie plików, funkcje (w stylu AWS Lambda), m.in.

Tworzenie API

Interfejsy API to sposób na świadczenie usług, z których mogą korzystać Twoje aplikacje lub aplikacje innych firm. Firebase umożliwia świadczenie niestandardowych usług, które z kolei korzystają z własnych usług Firebase bez konieczności konfigurowania zaplecza dla tych usług. Możesz na przykład zaoferować dostęp do bazy danych Firebase w czasie rzeczywistym dla aplikacji innych firm w celu wyszukiwania informacji zebranych przez czujniki przemysłowe.

Pierwszym krokiem w tworzeniu interfejsu API w Firebase jest uzyskanie dostępu do Konsola Firebase i dodaj projekt, klikając „Dodaj projekt” i nadając nazwę nowemu projektowi. Google umożliwi Ci włączenie Google Analytics dla Twojego nowego projektu. Zaleca się zaakceptowanie tego zalecenia, ponieważ uzyskasz korzyści, takie jak testy A/B i szeroki wybór raportów statystycznych z Twojego interfejsu API.

Po utworzeniu projektu będziesz mógł wybrać usługi Firebase, z których będzie korzystać Twój interfejs API. Aby zilustrować to zadanie, zobaczymy, jak korzystać z usługi bazy danych Firebase Realtime.

Konfigurowanie bazy danych czasu rzeczywistego w Firebase

Na pasku nawigacyjnym po lewej stronie, w sekcji Rozwijaj, kliknij Baza danych czasu rzeczywistego. Po prawej stronie pojawi się przycisk „Utwórz bazę danych”. Kliknij go, aby utworzyć swoją pierwszą bazę danych w Firebase.

Następnie będziesz musiał wybrać jedną z kilku opcji lokalizacji geograficznej dla nowej bazy danych. Wybierz ten, który jest najbliżej Twoich użytkowników. Jest to ważny aspekt, aby zminimalizować opóźnienia interfejsu API, szczególnie w aplikacjach czasu rzeczywistego.

Następnym krokiem jest skonfigurowanie podstawowych reguł bezpieczeństwa dla Twojej bazy danych. Możesz wybrać tryb zablokowany, a następnie w razie potrzeby przypisać uprawnienia dostępu lub wybrać tryb testowy, który umożliwia wszystkie odczyty i zapisy.

Możesz zacząć od opcji trybu testowego, aby nie komplikować ustawień bezpieczeństwa na początku. Zawsze możesz utworzyć reguły później, aby ustawić konfigurację zabezpieczeń z większą szczegółowością.

Gdy tylko zakończysz konfigurowanie 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 podstawowe elementy swojego projektu w konsoli Firebase. Następnym krokiem jest napisanie kodu API. Aby to zrobić, musisz zainicjować hosting i funkcje Firebase na swoim lokalnym komputerze. Możesz zainstalować narzędzia Firebase 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

Wyświetli się ekran powitalny, w którym Firebase poinformuje Cię o folderze, w którym zostanie zainicjowany Twój projekt, oraz pojawi się menu opcji.

W tym menu wybierz Funkcje i hosting (opcja Hosting pozwoli Ci mieć niestandardowy adres URL dla API, które opracujesz). Następnie wybierz z listy utworzoną wcześniej aplikację Firebase, po czym musisz wybrać język, którego chcesz używać. Aby opracować internetowy interfejs API, możesz wybrać JavaScript.

Jeśli będziesz używać zależności pakietów, zainstaluj je za pomocą npm w folderze functions. Następnie możesz zacząć pisać kod swoich funkcji. Pamiętaj o dołączeniu pakietów firebase-functions i firebase-admin wraz z innymi potrzebnymi pakietami:

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 inicjowania pakietu JavaScript SDK. Adres URL znajduje się w sekcji Baza danych czasu rzeczywistego w konsoli Firebase. Możesz go rozpoznać po jego formacie:

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

Możesz użyć poniższego fragmentu kodu, aby zainicjować SDK, zastępując dane odpowiadające obiektowi konfiguracji 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 nadszedł czas na wdrożenie. Ale zanim to zrobisz, będziesz musiał dokonać pewnych zmian w firebase.json, dodając następujące wiersze, zmodyfikowane zgodnie z konfiguracją twojego projektu:

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

Następnym krokiem jest wdrożenie. Za pierwszym razem musisz wykonać pełne wdrożenie, wykonując polecenie:

firebase deploy

W kolejnych wdrożeniach będziesz mógł wdrażać tylko funkcje, używając parametru –only functions.

Po wykonaniu polecenia deploy Firebase CLI wyświetla adresy URL punktów końcowych HTTP Twoich funkcji w terminalu, których możesz użyć do wywołania interfejsów API z aplikacji internetowej. Adres URL zawiera identyfikator projektu i region funkcji HTTP. Na przykład do wywołania funkcji zapytania o element można użyć następującego adresu URL, przekazując go jako parametr itemid=1:

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

Aby wykonać 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 użyciem, jak możesz przeczytać na stronie z cennikiem Firebase. Jest to usługa po rozliczeniu, co oznacza, że ​​opłata za wykorzystanie jest naliczana na koniec każdego miesiąca.

Jeśli nie masz subskrypcji Blaze, polecenie wdrażania nie wyświetli adresu URL interfejsu API. Zamiast tego zobaczysz komunikat informujący, że musisz zasubskrybować plan Blaze, jeśli chcesz wdrożyć w środowisku wykonawczym. W takim przypadku nadal możesz używać pakietu Firebase Local Emulation Suite do tworzenia i testowania aplikacji na komputerze lokalnym zamiast wdrażania ich w środowisku produkcyjnym Firebase. Testowanie lokalne jest przydatne, aby uniknąć niepotrzebnych kosztów podczas tworzenia aplikacji, ponieważ każde uruchomienie testu może generować opłaty na Twoim koncie.

Lokalne testowanie i prototypowanie

Narzędzie Local Emulator Suite oferuje zintegrowany interfejs użytkownika, który ułatwia tworzenie prototypów i ułatwia testowanie aplikacji na komputerze lokalnym.

Dzięki interfejsowi użytkownika Emulator Suite możesz między innymi testować projekty baz danych, przepływy pracy Cloud Functions, analizować wydajność usług zaplecza i oceniać zmiany w regułach bezpieczeństwa. Jest to w zasadzie bezpieczna piaskownica do testowania funkcjonalności interfejsu API przed wysłaniem go do środowiska produkcyjnego.

Aby emulować funkcje lub przetestować aplikację lokalnie, uruchom emulatory Firebase:start. Aby móc korzystać z emulatora Firestore, musisz mieć zainstalowaną Javę. Jeśli go nie masz, możesz go zainstalować z tutaj.

Po wywołaniu emulatora Firestore polecenie zwróci adres URL, który umożliwi otwarcie interfejsu użytkownika pakietu emulatorów w przeglądarce. Domyślnie ten adres URL to localhost: 4000, ale może się różnić na każdym komputerze.

Otrzymasz również pełny adres URL funkcji HTTP. Ten adres URL będzie wyglądał podobnie do:

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

tylko będzie miał nazwę twojego projektu, nazwę twojej funkcji, a także może mieć inny numer portu na twoim lokalnym komputerze.

Aby przetestować funkcję, skopiuj adres URL zwracany przez emulator, dodając wszelkie niezbędne parametry (np. ?itemid=1) i wprowadź go w nowej zakładce przeglądarki. Wyniki wykonania API pojawią się w interfejsie użytkownika pakietu emulatorów.

W zakładce Logs zobaczysz nowe logi wskazujące, że funkcja itemQuery() została wykonana. Jeśli Twoja funkcja wygeneruje nowe dane w Twojej bazie Firestore, zobaczysz je w zakładce Firestore.

Zwiększenie widoczności Twojego API

Jeśli chcesz, aby tworzone przez Ciebie interfejsy API stały się popularne, Firebase może Ci w tym pomóc. Nie tylko dlatego, że pozwala to na szybsze budowanie aplikacji, odkładając dużo pracy na uruchamianie i uruchamianie usług backendu, ale także pomagając w pozycjonowaniu produktu. Jak to możliwe? Po prostu dlatego, że aplikacje powiązane z Firebase plasują się lepiej w rankingach wyszukiwania niż inne aplikacje.

Weź też pod uwagę interfejs API indeksowania aplikacji Firebase. To narzędzie poprawia rankingi wyszukiwania linków do aplikacji i pomaga użytkownikom znaleźć żądaną treść. Umieszcza również przycisk Instaluj za przyciskiem strony głównej aplikacji, dzięki czemu zainteresowani użytkownicy mają tylko jedno kliknięcie, aby stać się użytkownikami Twojej aplikacji.

Podsumowując, Firebase nie tylko oferuje usługi zaplecza, które znacznie przyspieszają rozwój Twojego interfejsu API, ale gdy już zacznie działać i wyeksponuje go na świecie, pomaga również go promować – i zarabiać na nim.