Mit Firebase Data Connect-Client-SDKs können Sie Ihre serverseitigen Abfragen und Mutationen direkt über eine Firebase-App aufrufen. Sie generieren ein benutzerdefiniertes Client-SDK parallel, während Sie die Schemas, Abfragen und Mutationen entwerfen, die Sie in Ihrem Data Connect-Dienst bereitstellen. Anschließend integrieren Sie Methoden aus diesem SDK in Ihre Clientlogik.
Wie bereits erwähnt, werden Data Connect-Abfragen und ‑Mutationen nicht vom Clientcode gesendet und auf dem Server ausgeführt. Stattdessen werden Data Connect-Vorgänge bei der Bereitstellung wie Cloud Functions auf dem Server gespeichert. Sie müssen also entsprechende clientseitige Änderungen vornehmen, um Probleme für bestehende Nutzer zu vermeiden (z. B. bei älteren App-Versionen).
Deshalb bietet Data Connect eine Entwicklungsumgebung und Tools, mit denen Sie einen Prototyp für Ihre vom Server bereitgestellten Schemas, Abfragen und Mutationen erstellen können. Außerdem werden clientseitige SDKs automatisch generiert, während Sie den Prototyp erstellen.
Wenn Sie Updates für Ihre Dienst- und Client-Apps iteriert haben, können sowohl server- als auch clientseitige Updates bereitgestellt werden.
Flutter SDK generieren
Wie bei den meisten Firebase-Projekten erfolgt die Arbeit am Firebase Data Connect-Clientcode in einem lokalen Projektverzeichnis. Sowohl die Data Connect-VS Code-Erweiterung als auch die Firebase-Befehlszeile sind wichtige lokale Tools zum Generieren und Verwalten von Clientcode.
Die Optionen zur SDK-Generierung sind mit mehreren Einträgen in der dataconnect.yaml
-Datei verknüpft, die beim Initialisieren Ihres Projekts generiert wurde.
SDK-Generierung initialisieren
Fügen Sie in Ihrerconnector.yaml
Ihre outputDir
, package
und (für das Web SDK) packageJsonDir
hinzu.
connectorId: movies
generate:
dartSdk:
outputDir: ../../lib/generated # Feel free to change this to a different path
package: movies
outputDir
gibt an, wo das generierte SDK ausgegeben werden soll. Dieser Pfad ist relativ zum Verzeichnis, das die connector.yaml
-Datei selbst enthält.
Optional können Sie einen absoluten Pfad zu Ihrem outputDir
angeben.
package
gibt den Paketnamen an.
SDKs während des Prototypings aktualisieren
Wenn Sie mit der Data Connect-VS Code-Erweiterung und dem Data Connect-Emulator interaktiv Prototypen erstellen, werden SDK-Quelldateien automatisch generiert und aktualisiert, während Sie .gql
-Dateien ändern, in denen Schemas, Abfragen und Mutationen definiert werden. Dies kann eine nützliche Funktion in Workflows für das Hot-Reloading (Neuladen) sein.
.gql
-Updates beobachten und SDK-Quellen automatisch aktualisieren lassen.
Alternativ können Sie die SDKs über die Befehlszeile neu generieren, wenn .gql-Dateien geändert werden:
firebase dataconnect:sdk:generate --watch
SDKs für die Integration und für Produktionsversionen generieren
In einigen Szenarien, z. B. bei der Vorbereitung von Projektquellen, die für CI-Tests gesendet werden sollen, können Sie die Firebase-Befehlszeile für eine Batchaktualisierung aufrufen.
Verwenden Sie in diesen Fällen firebase dataconnect:sdk:generate
.
Clientcode einrichten
Data Connect App initialisieren
Initialisieren Sie zuerst Ihre App anhand der standardmäßigen Firebase-Einrichtungsanleitung.
Installieren Sie dann das Plug-in Data Connect:
flutter pub add firebase_data_connect
Data Connect Flutter SDK initialisieren
Initialisieren Sie die Instanz Data Connect mit den Informationen, die Sie zur Einrichtung von Data Connect verwendet haben (alles verfügbar auf dem Tab „Data Connect“ der Firebase-Konsole).
Bibliotheken importieren
Zum Initialisieren Ihres Clientcodes sind zwei Importsätze erforderlich: allgemeine Data Connect-Importe und spezifische, generierte SDK-Importe.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
Flutter-Apps prototypisieren und testen
Clients für die Verwendung eines lokalen Emulators instrumentieren
Sie können den Data Connect-Emulator über die Data Connect VS Code-Erweiterung oder über die Befehlszeile verwenden.
Die Instrumentierung der App für die Verbindung mit dem Emulator ist für beide Szenarien identisch.
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();
Wenn Sie zu Produktionsressourcen wechseln möchten, kommentieren Sie die Zeilen für die Verbindung zum Emulator.
Abfragen auf der Clientseite verwenden
Der generierte Code enthält bereits vordefinierte Suchanfragenreferenzen. Sie müssen sie nur importieren und execute
darauf anwenden.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
SDK-Abfragemethoden aufrufen
Hier ein Beispiel für die Verwendung dieser Funktionen für Aktionskürzel:
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();
}
Optionale Felder
Einige Abfragen können optionale Felder haben. In diesen Fällen stellt das Flutter SDK eine Builder-Methode bereit und muss separat festgelegt werden.
Das Feld rating
ist beispielsweise beim Aufruf von createMovie
optional. Sie müssen es also in der Builder-Funktion angeben.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();
Änderungen abonnieren
Sie können Änderungen abonnieren, die dann jedes Mal aktualisiert werden, wenn Sie eine Abfrage ausführen.
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`
Mutationen auf der Clientseite verwenden
Mutationen sind auf die gleiche Weise zugänglich wie Abfragen.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Datentypen im Dart SDK
Der Data Connect-Server stellt gängige GraphQL-Datentypen dar. Diese werden im SDK so dargestellt:
Typ der Datenverbindung | Dart |
---|---|
Zeitstempel | firebase_data_connect.Timestamp |
Ganzzahl (32-Bit) | int |
Datum | DateTime |
UUID | String |
INT64 | int |
Float | double |
Boolesch | bool |
Beliebig | firebase_data_connect.AnyValue |