Клиентские 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 |
Клиентские 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 |