Pakiety SDK klienta Firebase Data Connect umożliwiają wywoływanie zapytań i mutacji po stronie serwera bezpośrednio z aplikacji Firebase. Niestandardowy pakiet SDK klienta generujesz równolegle podczas projektowania schematów, zapytań i mutacji wdrażanych w usłudze Data Connect. Następnie integrujesz metody z tego pakietu SDK z logiką klienta.
Jak już wspomnieliśmy w innych miejscach, należy zwrócić uwagę, że zapytania i mutacje Data Connect nie są przesyłane przez kod klienta i wykonywane na serwerze. Zamiast tego po wdrożeniu operacje Data Connect są przechowywane na serwerze, podobnie jak w przypadku Cloud Functions. Oznacza to, że musisz wdrożyć odpowiednie zmiany po stronie klienta, aby nie zakłócać działania aplikacji u dotychczasowych użytkowników (np. w starszych wersjach aplikacji).
Dlatego Data Connect udostępnia środowisko programistyczne i narzędzia, które pozwalają tworzyć prototypy schematów, zapytań i mutacji wdrażanych przez serwer. Podczas tworzenia prototypu automatycznie generuje też zestawy SDK po stronie klienta.
Po iteracji aktualizacji usługi i aplikacji klienckich aktualizacje zarówno po stronie serwera, jak i klienta będą gotowe do wdrożenia.
Generowanie pakietu SDK Flutter
Tak jak w przypadku większości projektów Firebase, praca nad kodem klienta Firebase Data Connect odbywa się w lokalnym katalogu projektów. Zarówno rozszerzenie Data Connect w VS Code, jak i narzędzie wiersza poleceń Firebase są ważnymi narzędziami lokalnymi do generowania kodu klienta i zarządzania nim.
Opcje generowania pakietu SDK są powiązane z kilkoma wpisami w pliku dataconnect.yaml
, który został wygenerowany podczas inicjowania projektu.
Inicjowanie generowania pakietu SDK
W konfiguracjiconnector.yaml
dodaj swoje outputDir
, package
i (w przypadku pakietu SDK na potrzeby internetu) packageJsonDir
.
connectorId: movies
generate:
dartSdk:
outputDir: ../../lib/generated # Feel free to change this to a different path
package: movies
outputDir
określa, gdzie ma być zapisany wygenerowany pakiet SDK. Ta ścieżka jest względna do katalogu zawierającego plik connector.yaml
.
Opcjonalnie możesz podać ścieżkę bezwzględną do pliku outputDir
.
package
określa nazwę pakietu.
Aktualizowanie pakietów SDK podczas prototypowania
Jeśli tworzysz interaktywne prototypy za pomocą rozszerzenia Data Connect VS Code i jego emulatora Data Connect, pliki źródłowe pakietu SDK są generowane automatycznie i aktualizowane podczas modyfikowania plików .gql
definiujących schematy, zapytania i mutacje. Może to być przydatna funkcja w przypadku procesów (ponownego) wczytywania na gorąco.
.gql
, a także automatycznie aktualizować źródła pakietu SDK.
Możesz też użyć interfejsu wiersza poleceń, aby wygenerować pakiety SDK za każdym razem, gdy zmienisz pliki .gql:
firebase dataconnect:sdk:generate --watch
Generowanie pakietów SDK na potrzeby integracji i wersji produkcyjnych
W niektórych przypadkach, np. podczas przygotowywania źródeł projektu do przesłania na potrzeby testów CI, możesz wywołać interfejs wiersza poleceń Firebase w celu aktualizacji zbiorczej.
W takich przypadkach użyj firebase dataconnect:sdk:generate
.
Konfigurowanie kodu klienta
Inicjalizacja aplikacji Data Connect
Najpierw zainicjuj aplikację zgodnie ze standardowymi instrukcjami konfiguracji Firebase.
Następnie zainstaluj wtyczkę Data Connect:
flutter pub add firebase_data_connect
Zainicjuj pakiet SDK Data ConnectFlutter
Zainicjuj instancję Data Connect, korzystając z informacji użytych do skonfigurowania usługi Data Connect (wszystkie dostępne w konsoli Firebase na karcie Data Connect).
Importowanie bibliotek
Do zainicjowania kodu klienta potrzebne są 2 zbiory importów: ogólne importy Data Connect i konkretne, wygenerowane importy pakietu SDK.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
Twórz prototypy i testuj aplikacje Flutter
Użyj klienta do korzystania z lokalnego emulatora
Możesz użyć emulatora Data Connect, korzystając z rozszerzenia Data Connect w VS Code lub z poziomu wiersza poleceń.
W obu przypadkach instrumentowanie aplikacji w celu połączenia z emulatorem jest takie samo.
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'generated/movies.dart';
MoviesConnector.instance.dataConnect
.useDataConnectEmulator('127.0.0.1', 9399);
// Make calls from your app
QueryRef<ListMoviesData, void> ref = MoviesConnector.instance.listMovies.ref();
Aby przełączyć się na zasoby produkcyjne, skomentuj wiersze służące do łączenia się z emulatorem.
Korzystanie z zapytań po stronie klienta
Wygenerowany kod będzie już zawierać wstępnie zdefiniowane odwołania do zapytania. Wystarczy, że zaimportujesz i wywołasz execute
.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
Wywoływanie metod zapytań pakietu SDK
Oto przykład wykorzystania funkcji skrótów do działań:
import 'generated/movies.dart';
function onBtnClick() {
// This will call the generated Dart from the CLI and then make an HTTP request to the server.
MoviesConnector.instance.listMovies().execute().then(data => showInUI(data)); // == MoviesConnector.instance.listMovies().ref().execute();
}
Pola opcjonalne
Niektóre zapytania mogą zawierać pola opcjonalne. W takich przypadkach pakiet SDK Flutter udostępnia metodę Builder, którą trzeba ustawić osobno.
Na przykład pole rating
jest opcjonalne podczas wywoływania funkcji createMovie
, więc musisz je podać w funkcji kreatora.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();
Subskrybowanie zmian
Możesz subskrybować zmiany (będą one aktualizowane za każdym razem, gdy wykonasz zapytanie).
QueryRef<ListMoviesData, void> listRef = MoviesConnector.instance.listMovies().ref();
// subscribe will immediately invoke the query if no execute was called on it previously.
listRef.subscribe().listen((data) {
updateUIWithMovies(data.movies);
});
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
await listRef.execute(); // will update the subscription above`
Korzystanie z mutacji po stronie klienta
Mutacje są dostępne w taki sam sposób jak zapytania.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Typy danych w pakiecie SDK Dart
Serwer Data Connect reprezentuje typowe typy danych GraphQL. W pakiecie SDK są one reprezentowane w ten sposób:
Typ połączenia danych | Dart |
---|---|
Sygnatura czasowa | firebase_data_connect.timestamp |
Int (32-bitowa) | int, |
Data | Data i godzina |
UUID | ciąg znaków |
Int64 | int, |
Liczba zmiennoprzecinkowa | double, |
Wartość logiczna | bool |
Dowolna | firebase_data_connect.DowolnaValue |