Клиентские SDK Firebase Data Connect позволяют вызывать серверные запросы и мутации непосредственно из приложения Firebase. Вы генерируете собственный клиентский SDK параллельно с разработкой схем, запросов и мутаций, которые вы разворачиваете в сервисе Data Connect . Затем вы интегрируете методы из этого SDK в клиентскую логику.
Как мы уже упоминали ранее, важно отметить, что запросы и мутации Data Connect не отправляются клиентским кодом и не выполняются на сервере. Вместо этого при развёртывании операции Data Connect хранятся на сервере, как облачные функции. Это означает, что вам необходимо развернуть соответствующие изменения на стороне клиента, чтобы избежать нарушения работы существующих пользователей (например, в старых версиях приложения).
Именно поэтому Data Connect предоставляет вам среду разработки и инструменты, позволяющие создавать прототипы схем, запросов и мутаций, развёртываемых на сервере. Кроме того, Data Connect автоматически генерирует клиентские SDK во время создания прототипа.
После итеративного обновления сервисных и клиентских приложений обновления как на стороне сервера, так и на стороне клиента готовы к развертыванию.
Каков рабочий процесс разработки клиента?
Если вы следовали руководству «Начало работы» , вы уже ознакомились с общим процессом разработки Data Connect . В этом руководстве вы найдете более подробную информацию о создании пакетов SDK Flutter на основе вашей схемы и работе с клиентскими запросами и мутациями.
Подводя итог, чтобы использовать сгенерированные пакеты Flutter SDK в клиентских приложениях, вам необходимо выполнить следующие предварительные действия:
- Добавьте Firebase в ваше приложение Flutter .
- Установите flutterfire CLI
dart pub global activate flutterfire_cli
. - Запустите
flutterfire configure
.
Затем:
- Разработайте схему своего приложения.
Настройте генерацию SDK:
- С кнопкой «Добавить SDK в приложение» в нашем расширении Data Connect VS Code
- Обновив ваш
connector.yaml
.
Настройте и используйте эмулятор Data Connect и повторите попытку.
Создайте свой Flutter SDK
Как и в большинстве проектов Firebase, работа над клиентским кодом Firebase Data Connect осуществляется в локальном каталоге проекта. Расширение Data Connect VS Code и Firebase CLI — важные локальные инструменты для генерации и управления клиентским кодом.
Параметры генерации 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 CLI для пакетного обновления.
В этих случаях используйте firebase dataconnect:sdk:generate
.
Настроить клиентский код
Инициализируйте приложение Data Connect
Сначала инициализируйте свое приложение, используя стандартные инструкции по настройке Firebase .
Затем установите плагин Data Connect :
flutter pub add firebase_data_connect
Инициализируйте Data Connect Flutter SDK
Инициализируйте свой экземпляр 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';
Используйте запросы на стороне клиента
Сгенерированный код уже содержит предопределённые ссылки запросов. Вам остаётся только импортировать их и вызвать 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();
Создавайте прототипы и тестируйте свои приложения 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();
Для переключения на производственные ресурсы закомментируйте строки подключения к эмулятору.
Типы данных в Dart SDK
Сервер Data Connect поддерживает распространённые типы данных GraphQL. В SDK они представлены следующим образом.
Тип подключения данных | Дарт |
---|---|
Метка времени | firebase_data_connect.Timestamp |
Целое (32-битное) | инт |
Дата | ДатаВремя |
UUID | нить |
Int64 | инт |
Плавать | двойной |
Булевое значение | бул |
Любой | firebase_data_connect.AnyValue |