Начало работы с Firebase Data Connect

Это краткое руководство поможет вам начать работу с Firebase Data Connect и подключить ваши веб- и мобильные приложения к базе данных PostgreSQL. Вы:

  • Настройте локальный каталог проекта Firebase Data Connect с помощью VS Code и Firebase CLI.
  • Создавайте схемы, запросы и мутации Data Connect на основе идей вашего приложения на естественном языке.
  • Используйте строго типизированные SDK в своих приложениях для выполнения запросов и мутаций Data Connect .
  • Предоставьте экземпляр Cloud SQL для PostgreSQL, схему Data Connect, запросы и мутации (требуется план Blaze).

Настройте локальный каталог проекта

Установить локальные инструменты разработки для Data Connect можно двумя способами.

  1. В каталоге проекта выполните следующую команду.

    Скрипт устанавливает Firebase CLI и расширение Data Connect VS Code, а также помогает настроить проект через firebase init dataconnect . Если у вас не установлен десктопный VS Code, скрипт открывает его в браузере.

    curl -sL https://firebase.tools/init/dataconnect | editor=true bash
  2. Откройте экран расширения Data Connect VS Code, щелкнув значок Firebase на левой панели Visual Studio Code.

  3. Нажмите «Запустить эмуляторы» , чтобы запустить эмулятор с локальной базой данных PGlite.

Схема обзора

Firebase Data Connect использует GraphQL для определения модели данных. Директива @table сопоставляет тип GraphQL с таблицей PostgreSQL. Поля этого типа сопоставляются со столбцами PostgreSQL. Вы можете определять связи между таблицами, используя поля, ссылающиеся на другие типы @table , включая связи «многие ко многим» с использованием объединенных таблиц с составными первичными ключами.

В настройках по умолчанию файлы схемы Data Connect находятся в каталоге dataconnect/schema/ . Вот два примера таблиц из схемы шаблона фильма. Ваша схема может отличаться, если вы использовали Gemini для её генерации.

type Movie @table {
  # Every table has an implicit primary key field that looks something like:
  #  id: UUID! @default(expr: "uuidV4()")
  title: String!
  imageUrl: String!
  genre: String
}

type Review @table(key: ["movie", "user"]) {
  user: User!
  movie: Movie!
  rating: Int
  reviewText: String
  reviewDate: Date! @default(expr: "request.time")
}

Узнайте больше о схемах Data Connect

Разработка запросов и мутаций

Firebase Data Connect использует GraphQL для запросов и мутаций. Вы определяете их в файлах .gql и вызываете их по имени из своего приложения. Синтаксис GraphQL предоставляет строго типизированные SDK и гибкий API для получения именно тех данных, которые нужны вашему приложению.

Начальные данные в вашей базе данных

Запустив эмулятор, вы можете заполнить его начальными данными. Вы можете использовать предоставленный файл dataconnect/seed_data.gql или написать собственные мутации.

Используйте кнопку Run (local) Code Lens в VS Code, чтобы выполнить мутации и заполнить локальную базу данных PGlite.

Кнопка запуска CodeLens для Firebase Data Подключиться

Просмотр запросов и мутаций

В настройках по умолчанию запросы и мутации Data Connect можно найти в каталоге dataconnect/example/ .

С помощью вложенных запросов можно точно запрашивать реляционные данные.

query ListMovies @auth(level: PUBLIC, insecureReason: "Anyone can list all movies and their reviews.") {
  movies {
    title imageUrl genre
    reviews_on_movie {
      rating reviewDate
      user { username }
    }
  }
}

Data Connect помогает вам создавать безопасные запросы и мутации с помощью Firebase Auth.

Для обеспечения безопасности вашего приложения веб- и мобильные приложения могут получать доступ к запросам и мутациям Data Connect только с помощью директив @auth . Запросы и мутации могут безопасно получать доступ к UID аутентификации Firebase, используя выражение типа {field}_expr: "auth.uid" .

mutation AddReview($movieId: UUID!, $rating: Int!, $reviewText: String!) @auth(level: USER) {
  review_upsert(
    data: {
      userId_expr: "auth.uid"
      movieId: $movieId
      rating: $rating
      reviewText: $reviewText
    }
  )
}

Узнайте больше о запросах Data Connect Узнайте больше о мутациях Data Connect Узнайте больше об аутентификации Data Connect

Генерация запросов и мутаций

Для эффективного использования Data Connect не нужно быть экспертом по GraphQL. Вы можете генерировать запросы и мутации Data Connect на основе описаний на естественном языке.

В любом файле .gql введите # , чтобы начать комментарий и описать запрос или мутацию. Затем используйте кнопку «Генерировать/уточнить код операции» для генерации операции GraphQL.

Кнопка «Сгенерировать» для данных Firebase в CodeLens Подключиться

Используйте сгенерированный SDK в своем приложении

firebase init dataconnect автоматически настраивает типобезопасные SDK для приложений в вашем проекте. При необходимости вы можете добавить SDK вручную с помощью кнопки «Добавить SDK в приложение» в расширении VS Code или выполнив firebase init dataconnect:sdk .

Интернет

  1. Добавьте Firebase в свое веб- приложение.
  2. В основном файле вашего приложения React:

    • Импортируйте сгенерированный SDK:
    // Update as needed with the path to your generated SDK.
    import { listMovies, ListMoviesData } from '@dataconnect/generated';
    
    • Настройте свое приложение для подключения к эмулятору Data Connect :
    import { connectDataConnectEmulator } from 'firebase/data-connect';
    
    const dataConnect = getDataConnect(connectorConfig);
    connectDataConnectEmulator(dataConnect, 'localhost', 9399);
    
    • Вызов методов Data Connect .
    function App() {
      const [movies, setMovies] = useState<ListMoviesData['movies']>([]);
      useEffect(() => {
        listMovies.then(res => setMovies(res.data));
      }, []);
      return (
        movies.map(movie => <h1>{movie.title}</h1>);
      );
    }
    
    const root = ReactDOM.createRoot(document.getElementById('root'));
    root.render(<App />);
    

Быстрый

  1. Добавьте Firebase в ваше приложение iOS .
  2. Чтобы использовать сгенерированный SDK, настройте его как зависимость в Xcode.

    В верхней панели навигации Xcode выберите Файл > Добавить зависимости пакета > Добавить локальный и выберите папку, содержащую сгенерированный файл Package.swift .

  3. В главном делегате вашего приложения:

    • Импортируйте Data Connect SDK и сгенерированный вами SDK:

      import FirebaseDataConnect
      // Generated queries.
      // Update as needed with the package name of your generated SDK.
      import <CONNECTOR-PACKAGE-NAME>
      
      let connector = DataConnect.moviesConnector
      
    • Настройте свое приложение для подключения к эмулятору Data Connect :

      // Connect to the emulator on "127.0.0.1:9399"
      connector.useEmulator()
      
      // (alternatively) if you're running your emulator on non-default port:
      // connector.useEmulator(port: 9999)
      
    • Методы вызова Data Connect :

      struct ListMovieView: View {
          @StateObject private var queryRef = connector.listMovies.ref()
      
          var body: some View {
              VStack {
                  Button {
                      Task {
                          do {
                              try await refresh()
                          } catch {
                              print("Failed to refresh: \(error)")
                          }
                      }
                  } label: {
                      Text("Refresh")
                  }
      
                  // use the query results in a view
                  ForEach(queryRef.data?.movies ?? []) { movie in
                      Text(movie.title)
                  }
                  
              }
          }
      }
      
      @MainActor
      func refresh() async throws {
          _ = try await queryRef.execute()
      }
      
      struct ContentView_Previews: PreviewProvider {
          static var previews: some View {
              ListMovieView()
          }
      }
      

Котлин Android

  1. Добавьте Firebase в ваше приложение Android .
  2. Чтобы использовать сгенерированный SDK, настройте Data Connect как зависимость в Gradle.

    Обновите plugins и dependencies в вашем app/build.gradle.kts .

    plugins {
      // Use whichever versions of these dependencies suit your application.
      // The versions shown here were the latest as of March 14, 2025.
      // Note, however, that the version of kotlin("plugin.serialization") must,
      // in general, match the version of kotlin("android").
      id("com.android.application") version "8.9.0"
      id("com.google.gms.google-services") version "4.4.2"
      val kotlinVersion = "2.1.10"
      kotlin("android") version kotlinVersion
      kotlin("plugin.serialization") version kotlinVersion
    }
    
    dependencies {
      // Use whichever versions of these dependencies suit your application.
      // The versions shown here were the latest versions as of March 14, 2025.
      implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta04")
      implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
      implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3")
    
      // These dependencies are not strictly required, but will very likely be used
      // when writing modern Android applications.
      implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
      implementation("androidx.appcompat:appcompat:1.7.0")
      implementation("androidx.activity:activity-ktx:1.10.1")
      implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7")
      implementation("com.google.android.material:material:1.12.0")
    }
    
  3. В основной деятельности вашего приложения:

    • Получите экземпляр коннектора из сгенерированного вами SDK:
    private val connector = com.myapplication.MoviesConnector.instance
    
    • Настройте свое приложение для подключения к эмулятору Data Connect :
    private val connector = com.myapplication.MoviesConnector.instance
      .apply {
        // Connect to the emulator on "10.0.2.2:9399" (default port)
        dataConnect.useEmulator()
    
        // (alternatively) if you're running your emulator on non-default port:
        // dataConnect.useEmulator(port = 9999)
      }
    
    • Вызов методов Data Connect .
    class MainActivity : AppCompatActivity() {
    
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView: TextView = findViewById(R.id.text_view)
    
        lifecycleScope.launch {
          lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
            
            val result = connector.listMovies.runCatching { execute { } }
            
            val newTextViewText = result.fold(
              onSuccess = {
                val titles = it.data.movies.map { it.title }
                "${titles.size} movies: " + titles.joinToString(", ")
              },
              onFailure = { "ERROR: ${it.message}" }
            )
            textView.text = newTextViewText
          }
        }
      }
    }
    

Трепетание

  1. Добавьте Firebase в ваше приложение Flutter .
  2. Установите flutterfire CLI dart pub global activate flutterfire_cli .
  3. Запустите flutterfire configure .
  4. В основной функции вашего приложения:

    • Импортируйте сгенерированный SDK:
    // Generated queries.
    // Update as needed with the path to your generated SDK
    
    import 'movies_connector/movies.dart';
    
    • Настройте свое приложение для подключения к эмулятору Data Connect :
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp(
        options: DefaultFirebaseOptions.currentPlatform,
      );
      
      MoviesConnector.instance.dataConnect
          .useDataConnectEmulator(Uri.base.host, 443, isSecure: true);
      
      runApp(const MyApp());
    }
    
    • Вызов методов Data Connect .
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                body: Column(children: [
          ConstrainedBox(
            constraints: const BoxConstraints(maxHeight: 200),
            child: FutureBuilder(
                future: MoviesConnector.instance.listMovies().execute(),
                builder: (context, snapshot) {
                  if (snapshot.connectionState == ConnectionState.done) {
                    return ListView.builder(
                      scrollDirection: Axis.vertical,
                      itemBuilder: (context, index) => Card(
                          child: Text(
                        snapshot.data!.data.movies[index].title,
                      )),
                      itemCount: snapshot.data!.data.movies.length,
                    );
                  }
                  return const CircularProgressIndicator();
                }),
          )
        ])));
      }
    }
    

Развертывание в производство

Чтобы развернуть схему, запросы и мутации в рабочей среде:

  1. Обновите проект Firebase для использования плана Blaze.

  2. Нажмите кнопку «Развернуть в производстве» в расширении Data Connect VS Code или запустите в терминале:

    firebase deploy --only dataconnect
    

    После развертывания посетите консоль Firebase , чтобы просмотреть схему и выполнить запросы и мутации.

Узнайте больше о dataconnect.yaml Узнайте больше о том, как Data Connect работает с Cloud SQL

Следующие шаги

Теперь, когда вы завершили краткое руководство, вот несколько дальнейших шагов: