Les SDK client Firebase SQL Connect vous permettent d'appeler vos requêtes et mutations côté serveur directement depuis une application Firebase. Vous générez un SDK client personnalisé en parallèle lorsque vous concevez les schémas, les requêtes et les mutations que vous déployez sur votre service SQL Connect. Ensuite, vous intégrez les méthodes de ce SDK à votre logique client.
Comme nous l'avons mentionné ailleurs, il est important de noter que les requêtes et les mutations SQL Connect ne sont pas envoyées par le code client et exécutées sur le serveur. Au lieu de cela, lorsqu'elles sont déployées, les opérations SQL Connect sont stockées sur le serveur, comme Cloud Functions. Cela signifie que vous devez déployer les modifications correspondantes côté client pour éviter de perturber les utilisateurs existants (par exemple, sur les anciennes versions de l'application).
C'est pourquoi SQL Connect vous fournit un environnement de développement et des outils qui vous permettent de prototyper vos schémas, requêtes et mutations déployés sur le serveur. Il génère également automatiquement des SDK côté client pendant que vous créez un prototype.
Une fois que vous avez effectué des mises à jour itératives de votre service et de vos applications clientes, les mises à jour côté serveur et côté client sont prêtes à être déployées.
Quel est le workflow de développement client ?
Si vous avez suivi la section Premiers pas, vous avez découvert le flux de développement global pour SQL Connect. Dans ce guide, vous trouverez des informations plus détaillées sur la génération de SDK Flutter à partir de votre schéma et sur l'utilisation des requêtes et des mutations client.
En résumé, pour utiliser les SDK Flutter générés dans vos applications clientes, vous devez suivre les étapes préalables suivantes :
- Ajoutez Firebase à votre application Flutter.
- Installez la CLI FlutterFire
dart pub global activate flutterfire_cli. - Exécutez
flutterfire configure.
Puis :
- Développez le schéma de votre application.
Configurez la génération du SDK :
- Avec le bouton Ajouter le SDK à l'application dans notre extension VS Code SQL Connect
- En mettant à jour votre
connector.yaml.
Initialisez votre code client et importez les bibliothèques.
Configurez et utilisez l'émulateur SQL Connect, puis effectuez des itérations.
Générer votre SDK Flutter
Utilisez la CLI Firebase pour configurer les SDK générés par SQL Connect dans vos applications.
La commande init doit détecter toutes les applications du dossier actuel et installer automatiquement les SDK générés.
firebase init dataconnect:sdk
Mettre à jour les SDK lors du prototypage
Si l'extension VS Code SQL Connect est installée, elle maintient toujours les SDK générés à jour.
Si vous n'utilisez pas l'extension VS Code SQL Connect, vous pouvez utiliser la CLI Firebase pour maintenir à jour les SDK générés.
firebase dataconnect:sdk:generate --watchGénérer des SDK dans des pipelines de compilation
Vous pouvez utiliser la CLI Firebase pour générer des SDK SQL Connect dans les processus de compilation CI/CD.
firebase dataconnect:sdk:generateConfigurer le code client
Initialiser votre application SQL Connect
Commencez par initialiser votre application en suivant les instructions de configuration standards de Firebase.
Ensuite, installez le plug-in SQL Connect :
flutter pub add firebase_data_connectInitialiser le SDK Flutter SQL Connect
Initialisez votre instance SQL Connect à l'aide des informations que vous avez utilisées pour configurer SQL Connect. Vous trouverez ces informations sur la page Bases de données et stockage > SQL Connect de la console Firebase.
Importer des bibliothèques
Deux ensembles d'importations sont nécessaires pour initialiser votre code client : les importations SQL Connect générales et les importations de SDK spécifiques générées.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
Utiliser des requêtes côté client
Le code généré inclura déjà des références de requête prédéfinies. Il vous suffit de les importer et d'appeler execute.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
Appeler les méthodes de requête du SDK
Voici un exemple d'utilisation de ces fonctions de raccourci d'action :
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();
}
Champs facultatifs
Certaines requêtes peuvent comporter des champs facultatifs. Dans ce cas, le SDK Flutter expose une méthode de compilation et doit être défini séparément.
Par exemple, le champ rating est facultatif lors de l'appel de createMovie. Vous devez donc le fournir dans la fonction de compilation.
await MoviesConnector.instance.createMovie( title: 'Empire Strikes Back', releaseYear: 1980, genre: 'Sci-Fi').rating(5).execute();
S'abonner aux modifications
Consultez Recevoir des informations en temps réel de SQL Connect.
Gérer les modifications apportées aux champs d'énumération
Le schéma d'une application peut contenir des énumérations, auxquelles vos requêtes GraphQL peuvent accéder.
À mesure que la conception d'une application évolue, vous pouvez ajouter de nouvelles valeurs d'énumération acceptées. Par exemple, imaginez que vous décidiez d'ajouter une valeur FULLSCREEN à l'énumération AspectRatio plus tard dans le cycle de vie de votre application.
Dans le workflow SQL Connect, vous pouvez utiliser des outils de développement locaux pour mettre à jour vos requêtes et vos SDK.
Toutefois, avant de publier une version mise à jour de vos clients, les anciens clients déployés peuvent ne plus fonctionner.
Exemple d'implémentation résiliente
Le SDK généré force la gestion des valeurs inconnues. Autrement dit, le code client doit désencapsuler l'objet EnumValue dans Known ou Unknown.
final result = await MoviesConnector.instance.listMovies().execute();
if (result.data != null && result.data!.isNotEmpty) {
handleEnumValue(result.data![0].aspectratio);
}
void handleEnumValue(EnumValue<AspectRatio> aspectValue) {
if (aspectValue.value != null) {
switch(aspectValue.value!) {
case AspectRatio.ACADEMY:
print('This movie is in Academy aspect');
break;
case AspectRatio.WIDESCREEN:
print('This movie is in Widescreen aspect');
break;
case AspectRatio.ANAMORPHIC:
print('This movie is in Anamorphic aspect');
break;
case AspectRatio.IMAX:
print('This movie is in IMAX aspect');
}
} else {
print('Unknown aspect ratio detected: ${aspectValue.stringValue}');
}
}
Activer la mise en cache côté client
SQL Connect dispose d'une fonctionnalité facultative de mise en cache côté client, que vous pouvez activer en modifiant le fichier connector.yaml. Lorsque cette fonctionnalité est activée, les SDK clients générés mettent en cache localement les réponses aux requêtes, ce qui peut réduire le nombre de requêtes de base de données effectuées par votre application et permet aux parties de votre application dépendantes de la base de données de fonctionner lorsque la disponibilité du réseau est interrompue.
Pour activer la mise en cache côté client, ajoutez une configuration de mise en cache client à la configuration de votre connecteur :
generate:
javascriptSdk:
outputDir: ../dart/
package: "dataconnect_generated"
clientCache:
maxAge: 5s
storage: memory
Cette configuration comporte deux paramètres, tous deux facultatifs :
maxAge: âge maximal d'une réponse mise en cache avant que le SDK client ne récupère de nouvelles valeurs. Exemples : "0", "30s", "1h30m".La valeur par défaut de
maxAgeest0, ce qui signifie que les réponses sont mises en cache, mais que le SDK client récupère toujours les nouvelles valeurs. Les valeurs mises en cache ne seront utilisées que lorsqueCACHE_ONLYest défini surexecute()et que le résultat initial est renvoyé parsubscribe().storage: le SDK client peut être configuré pour mettre en cache les réponses dans l'espace de stockagepersistentou dansmemory. Les résultats mis en cache dans l'espace de stockagepersistentsont conservés lors des redémarrages de l'application. Lorsque vous ciblez Android ou iOS, la valeur par défaut estpersistent. Lorsque vous ciblez des navigateurs Web, seul l'espace de stockagememoryest accepté.
Après avoir mis à jour la configuration de mise en cache de votre connecteur, régénérez vos SDK clients et recompilez votre application. Une fois cette opération effectuée, execute() et subscribe() mettront en cache les réponses et utiliseront les valeurs mises en cache conformément à la règle que vous avez configurée. Cela se produit généralement automatiquement, sans aucune étape supplémentaire de votre part. Toutefois, tenez compte des points suivants :
Le comportement par défaut de
execute()est celui décrit ci-dessus : si un résultat est mis en cache pour une requête et que la valeur mise en cache n'est pas antérieure àmaxAge, utilisez la valeur mise en cache. Ce comportement par défaut est appelé règlePREFER_CACHE.Vous pouvez également spécifier des appels individuels de
execute()pour ne diffuser que les valeurs mises en cache (CACHE_ONLY) ou pour récupérer sans condition les nouvelles valeurs du serveur (SERVER_ONLY).await queryRef.execute(fetchPolicy: QueryFetchPolicy.cacheOnly);await queryRef.execute(fetchPolicy: QueryFetchPolicy.serverOnly);Lorsque vous appelez
subscribe(), il renvoie toujours immédiatement le contenu mis en cache s'il existe, quel que soit le paramètremaxAge. Les appels ultérieurs àexecute()avertiront les écouteurs en fonction de la valeurmaxAgeconfigurée.
Utiliser des mutations côté client
Les mutations sont accessibles de la même manière que les requêtes.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Créer des prototypes et tester vos applications Flutter
Instrumenter les clients pour qu'ils utilisent un émulateur local
Vous pouvez utiliser l'émulateur SQL Connect, que ce soit à partir de l'extension VS Code SQL Connect ou de la CLI.
L'instrumentation de l'application pour se connecter à l'émulateur est la même pour les deux scénarios.
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();
Pour passer aux ressources de production, mettez en commentaire les lignes permettant de se connecter à l'émulateur.
Types de données dans le SDK Dart
Le serveur SQL Connect représente les types de données GraphQL courants. Ils sont représentés dans le SDK comme suit.
| Type : SQL Connect | Dart |
|---|---|
| Horodatage | firebase_data_connect.Timestamp |
| Int (32 bits) | int |
| Date | DateTime |
| UUID | chaîne |
| Int64 | int |
| Float | double |
| Booléen | booléen |
| Tous | firebase_data_connect.AnyValue |