Клиентские SDK Firebase Data Connect позволяют вызывать запросы и изменения на стороне сервера непосредственно из приложения Firebase. Пользовательский клиентский SDK создается параллельно с разработкой схем, запросов и изменений, которые вы развертываете в службе Data Connect . Затем вы интегрируете методы из этого SDK в свою клиентскую логику.
Как мы уже упоминали, важно отметить, что запросы и изменения Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развертывании операции Data Connect сохраняются на сервере, как и облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы не нарушать работу существующих пользователей (например, в старых версиях приложения).
Вот почему Data Connect предоставляет вам среду разработки и инструменты, которые позволяют создавать прототипы схем, запросов и мутаций, развернутых на сервере. Он также автоматически генерирует клиентские SDK во время создания прототипа.
После повторного обновления служб и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.
Создайте свой Flutter SDK
Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect происходит в локальном каталоге проекта. И расширение Data Connect VS Code, и интерфейс командной строки Firebase являются важными локальными инструментами для создания клиентского кода и управления им.
Параметры создания SDK привязаны к нескольким записям в файле dataconnect.yaml
, созданном при инициализации проекта.
Инициализировать создание SDK
В файлconnector.yaml
добавьте outputDir
, package
и (для веб-SDK) packageJsonDir
. connectorId: movies
generate:
dartSdk:
outputDir: ../../lib/generated # Feel free to change this to a different path
package: movies
outputDir
указывает, куда должен выводиться сгенерированный SDK. Этот путь указывается относительно каталога, содержащего сам файл connector.yaml
. При желании вы можете указать абсолютный путь к вашему outputDir
.
package
указывает имя пакета.
Обновляйте SDK во время прототипирования
Если вы создаете прототипы в интерактивном режиме с помощью расширения Data Connect VS Code и его эмулятора Data Connect , исходные файлы SDK автоматически генерируются и обновляются, пока вы изменяете файлы .gql
, определяющие схемы, запросы и мутации. Это может быть полезной функцией в рабочих процессах горячей (повторной) загрузки.
.gql
, а также автоматически обновлять источники SDK.Альтернативно вы можете использовать CLI для повторного создания SDK при каждом изменении файлов .gql:
firebase dataconnect:sdk:generate --watch
Создание SDK для интеграции и производственных выпусков.
В некоторых сценариях, например при подготовке источников проекта к отправке на CI-тесты, вы можете вызвать интерфейс командной строки Firebase для пакетного обновления.
В этих случаях используйте firebase dataconnect:sdk:generate
.
Настройка клиентского кода
Инициализируйте приложение Data Connect
Сначала инициализируйте свое приложение, используя стандартные инструкции по настройке Firebase .
Затем установите плагин Data Connect :
flutter pub add firebase_data_connect
Инициализация SDK Data Connect Flutter
Инициализируйте экземпляр Data Connect , используя информацию, которую вы использовали для настройки Data Connect (все доступно на вкладке Data Connect консоли Firebase ).
Импортировать библиотеки
Для инициализации клиентского кода необходимы два набора импортов: общий импорт Data Connect и специальный импорт, созданный SDK.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
Создайте прототип и протестируйте свои приложения Flutter
Инструментизация клиентов для использования локального эмулятора
Вы можете использовать эмулятор Data Connect как из расширения Data Connect VS Code, так и из CLI.
Инструментирование приложения для подключения к эмулятору одинаково для обоих сценариев.
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();
Для перехода к производственным ресурсам закомментируйте строки подключения к эмулятору.
Используйте запросы на стороне клиента
Сгенерированный код уже будет содержать предопределенные ссылки на запросы. Все, что вам нужно сделать, это импортировать и вызвать их execute
.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
Вызов методов запроса SDK
Вот пример использования этих функций быстрого доступа к действиям:
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();
}
Необязательные поля
Некоторые запросы могут иметь необязательные поля. В этих случаях Flutter SDK предоставляет метод компоновщика, и его нужно будет настроить отдельно.
Например, поле rating
не является обязательным при вызове createMovie
, поэтому вам необходимо указать его в функции компоновщика.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();
Подписаться на изменения
Вы можете подписаться на изменения (которые будут обновляться каждый раз при выполнении запроса).
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`
Используйте мутации на стороне клиента
Мутации доступны так же, как и запросы.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Типы данных в Dart SDK
Сервер Data Connect представляет распространенные типы данных GraphQL. В SDK они представлены следующим образом.
Тип подключения данных | Дарт |
---|---|
Временная метка | firebase_data_connect.Timestamp |
Целое (32-битное) | интервал |
Дата | ДатаВремя |
UUID | нить |
Int64 | интервал |
Плавать | двойной |
логическое значение | логическое значение |
Любой | firebase_data_connect.AnyValue |