Mulai menggunakan Firebase Data Connect secara lokal

Dalam panduan memulai ini, Anda akan mempelajari cara mem-build Firebase Data Connect di aplikasi secara lokal tanpa menyiapkan instance SQL produksi. Anda akan:

  • Tambahkan Firebase Data Connect ke project Firebase Anda.
  • Siapkan lingkungan pengembangan, termasuk ekstensi Visual Studio Code untuk digunakan dengan instance lokal.
  • Kemudian, kami akan menunjukkan cara:
    • Membuat skema untuk aplikasi film
    • Menentukan kueri dan mutasi yang akan digunakan di aplikasi Anda
    • Menguji kueri dan mutasi dengan data sampel terhadap emulator lokal
    • Membuat SDK dengan jenis yang kuat dan menggunakannya di aplikasi
    • Deploy skema, kueri, dan data akhir Anda ke cloud (opsional, dengan upgrade paket Blaze).

Memilih alur pengembangan lokal

Data Connect menawarkan dua cara untuk menginstal alat pengembangan dan bekerja secara lokal.

Prasyarat

Untuk menggunakan quickstart ini, Anda memerlukan hal berikut.

Menyiapkan lingkungan pengembangan

  1. Buat direktori baru untuk project lokal Anda.
  2. Jalankan perintah berikut di direktori baru yang Anda buat.

      curl -sL https://firebase.tools/dataconnect | bash

    Skrip ini mencoba menyiapkan lingkungan pengembangan untuk Anda dan meluncurkan IDE berbasis browser. IDE ini menyediakan alat, termasuk ekstensi VS Code yang dipaketkan sebelumnya, untuk membantu Anda mengelola skema dan menentukan kueri serta mutasi yang akan digunakan dalam aplikasi, dan membuat SDK dengan jenis yang kuat.

alias dataconnect='curl -sL https://firebase.tools/dataconnect | bash'

Menyiapkan direktori project

Untuk menyiapkan project lokal, lakukan inisialisasi direktori project Anda. Di jendela IDE, di panel sebelah kiri, klik ikon Firebase untuk membuka UI ekstensi VS Code Data Connect:

  1. Klik tombol Sign in with Google.
  2. Klik tombol Connect a Firebase project dan pilih project yang Anda buat sebelumnya di konsol.
  3. Klik tombol Run firebase init.
  4. Klik tombol Start emulators.

Membuat skema

Di direktori project Firebase, dalam file /dataconnect/schema/schema.gql, mulai tentukan skema GraphQL tentang film.

Film

Di Data Connect, kolom GraphQL dipetakan ke kolom. Film memiliki id, title, imageUrl, dan genre. Data Connect mengenali jenis data primitif: String dan UUID.

Salin cuplikan berikut atau hapus komentar pada baris yang sesuai dalam file.

# By default, a UUID id key will be created by default as primary key.
# If you want to specify a primary key, say title, which you can do through
# the @table(key: "title") directive
type Movie @table {
  id: UUID! @default(expr: "uuidV4()")
  title: String!
  imageUrl: String!
  genre: String
}

MovieMetadata

Salin cuplikan berikut atau hapus komentar pada baris yang sesuai dalam file.

# Movie - MovieMetadata is a one-to-one relationship
type MovieMetadata @table {
  # This time, we omit adding a primary key because
  # you can rely on Data Connect to manage it.

  # @unique indicates a 1-1 relationship
  movie: Movie! @unique
  # movieId: UUID <- this is created by the above reference
  rating: Float
  releaseYear: Int
  description: String
}

Perhatikan bahwa kolom movie dipetakan ke jenis Movie. Data Connect memahami bahwa ini adalah hubungan antara Movie dan MovieMetadata dan akan mengelola hubungan ini untuk Anda.

Pelajari skema Data Connect lebih lanjut dalam dokumentasi

Menambahkan data ke tabel

Di panel editor IDE, Anda akan melihat tombol CodeLens muncul di atas jenis GraphQL di /dataconnect/schema/schema.gql. Anda dapat menggunakan tombol Tambahkan data dan Jalankan (Lokal) untuk menambahkan data ke database lokal.

Untuk menambahkan kumpulan data ke tabel Movie dan MovieMetadata:

  1. Di schema.gql, klik tombol Tambahkan data di atas deklarasi jenis Movie.
    Tombol Tambahkan data CodeLens untuk Firebase Data Connect
  2. Dalam file Movie_insert.gql yang dihasilkan, hard code data untuk tiga kolom.
  3. Klik tombol Run (Local).
    Tombol Run CodeLens untuk Firebase Data Connect
  4. Ulangi langkah sebelumnya untuk menambahkan data ke tabel MovieMetadata, dengan menyediakan id Film Anda di kolom movieId, seperti yang diminta dalam mutasi MovieMetadata_insert yang dihasilkan.

Untuk memverifikasi dengan cepat bahwa data telah ditambahkan:

  1. Kembali ke schema.gql, klik tombol Baca data di atas deklarasi jenis Movie.
  2. Pada file Movie_read.gql yang dihasilkan, klik tombol Run (Local) untuk menjalankan kueri.

Pelajari mutasi Data Connect lebih lanjut dalam dokumentasi

Menentukan kueri

Sekarang bagian yang menyenangkan: mari kita tentukan kueri yang akan Anda perlukan dalam aplikasi. Sebagai developer, Anda terbiasa menulis kueri SQL, bukan kueri GraphQL, sehingga hal ini mungkin terasa sedikit berbeda pada awalnya.

Namun, GraphQL jauh lebih ringkas dan aman dari jenis daripada SQL mentah. Selain itu, ekstensi VS Code kami memudahkan pengalaman pengembangan.

Mulai edit file /dataconnect/connector/queries.gql. Jika Anda ingin mendapatkan semua film, gunakan kueri seperti ini.

# File `/dataconnect/connector/queries.gql`

# @auth() directives control who can call each operation.
# Anyone should be able to list all movies, so the auth level is set to PUBLIC
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

Jalankan kueri menggunakan tombol CodeLens di dekatnya.

Fitur yang sangat menarik di sini adalah kemampuan untuk memperlakukan hubungan database seperti grafik. Karena data MovieMetadata memiliki kolom movie yang mereferensikan film, Anda dapat menyusun bertingkat ke dalam kolom dan mendapatkan informasi tentang info film kembali. Coba tambahkan jenis movieMetadata_on_movie yang dihasilkan ke kueri ListMovies.

query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
    movieMetadata_on_movie {
        rating
    }
  }
}

Pelajari kueri Data Connect lebih lanjut dalam dokumentasi

Membuat SDK dan menggunakannya di aplikasi

Di panel kiri IDE, klik ikon Firebase untuk membuka UI ekstensi VS Code Data Connect:

  1. Klik tombol Tambahkan SDK ke aplikasi.
  2. Pada dialog yang muncul, pilih direktori yang berisi kode untuk aplikasi Anda. Kode SDK Data Connect akan dibuat dan disimpan di sana.

  3. Pilih platform aplikasi Anda, lalu perhatikan bahwa kode SDK langsung dibuat di direktori yang Anda pilih.

Menggunakan SDK untuk memanggil kueri dari aplikasi

Anda dapat menggunakan SDK yang dihasilkan Data Connect untuk menerapkan panggilan ke kueri ListMovies. Kemudian, Anda dapat menjalankan kueri ini secara lokal menggunakan emulator Data Connect.

  1. Tambahkan Firebase ke aplikasi web Anda.
  2. Di file utama aplikasi React Anda:

    • mengimpor SDK yang dihasilkan
    • melengkapi aplikasi untuk terhubung ke emulator Data Connect
    • memanggil metode Data Connect.

    Anda dapat menyalin cuplikan berikut dan menjalankannya sebagai aplikasi mandiri.

    import React from 'react';
    import ReactDOM from 'react-dom/client';
    
    import { connectDataConnectEmulator } from 'firebase/data-connect';
    
    // Generated queries.
    // Update as needed with the path to your generated SDK.
    import { listMovies, ListMoviesData } from '@movie-app/movies';
    
    const dataConnect = getDataConnect(connectorConfig);
    connectDataConnectEmulator(dataConnect, 'localhost', 9399);
    
    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. Tambahkan Firebase ke aplikasi iOS Anda.
  2. Untuk menggunakan SDK yang dihasilkan, konfigurasikan sebagai dependensi di Xcode.

    Di menu navigasi atas Xcode, pilih File > Add Package Dependencies > Add Local, lalu pilih folder yang berisi Package.swift yang dihasilkan.

  3. Di delegasi utama aplikasi Anda:

    • mengimpor SDK yang dihasilkan
    • melengkapi aplikasi untuk terhubung ke emulator Data Connect
    • memanggil metode Data Connect.

    Anda dapat menyalin cuplikan berikut dan menjalankannya sebagai aplikasi mandiri.

    import SwiftUI
    
    import FirebaseDataConnect
    // Generated queries.
    // Update as needed with the package name of your generated SDK.
    import <CONNECTOR-PACKAGE-NAME>
    
    let connector = DataConnect.moviesConnector
    
    // 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)
    
    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 ?? [], id: \.self.id) { movie in
                        Text(movie.title)
                    }
                }
        }
        @MainActor
        func refresh() async throws {
            _ = try await queryRef.execute()
        }
    
        struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ListMovieView()
        }
    }
    
  1. Tambahkan Firebase ke aplikasi Android Anda.
  2. Untuk menggunakan SDK yang dihasilkan, konfigurasikan Data Connect sebagai dependensi di Gradle.

    Perbarui plugins dan dependencies di app/build.gradle.kts Anda.

    plugins {
      // Use whichever versions of these dependencies suit your application.
      // The versions shown here were the latest as of December 03, 2024.
      // Note, however, that the version of kotlin("plugin.serialization") must,
      // in general, match the version of kotlin("android").
      id("com.android.application") version "8.7.3"
      id("com.google.gms.google-services") version "4.4.2"
      val kotlinVersion = "2.1.0"
      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 December 03, 2024.
      implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta03")
      implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
      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.9.3")
      implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7")
      implementation("com.google.android.material:material:1.12.0")
    }
    
  3. Di aktivitas utama aplikasi Anda:

    • mengimpor SDK yang dihasilkan
    • melengkapi aplikasi untuk terhubung ke emulator Data Connect
    • memanggil metode Data Connect.

    Anda dapat menyalin cuplikan berikut dan menjalankannya sebagai aplikasi mandiri.

    import android.os.Bundle
    import android.widget.TextView
    import androidx.appcompat.app.AppCompatActivity
    import androidx.lifecycle.Lifecycle
    import androidx.lifecycle.lifecycleScope
    import androidx.lifecycle.repeatOnLifecycle
    import kotlinx.coroutines.launch
    
    
    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)
      }
    
    
    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. Tambahkan Firebase ke aplikasi Flutter Anda.
  2. Instal flutterfire CLI dart pub global activate flutterfire_cli.
  3. Jalankan flutterfire configure.
  4. Dalam fungsi utama aplikasi Anda:

    • mengimpor SDK yang dihasilkan
    • melengkapi aplikasi untuk terhubung ke emulator Data Connect
    • memanggil metode Data Connect.

    Anda dapat menyalin cuplikan berikut dan menjalankannya sebagai aplikasi mandiri.

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'firebase_options.dart';

// Generated queries.
// Update as needed with the path to your generated SDK

import 'movies_connector/movies.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  
  MoviesConnector.instance.dataConnect
      .useDataConnectEmulator(Uri.base.host, 443, isSecure: true);
  
  runApp(const MyApp());
}

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();
            }),
      )
    ])));
  }
}

Men-deploy skema dan kueri ke produksi

Setelah menyiapkan aplikasi secara lokal, sekarang Anda dapat men-deploy skema, data, dan kueri ke cloud. Anda memerlukan project paket Blaze untuk menyiapkan instance Cloud SQL.

  1. Buka bagian Data Connect di konsol Firebase dan buat instance Cloud SQL uji coba gratis.

  2. Di Terminal terintegrasi IDE, jalankan firebase init dataconnect dan pilih Region/Service ID yang baru saja Anda buat di konsol.

  3. Pilih "Y" saat diminta dengan "File dataconnect/dataconnect.yaml sudah ada, Ganti?".

  4. Di jendela IDE, di UI Ekstensi VS Code, klik tombol Deploy to production.

  5. Setelah di-deploy, buka konsol Firebase untuk memverifikasi bahwa skema, operasi, dan data telah diupload ke cloud. Anda akan dapat melihat skema, dan menjalankan operasi di konsol juga. Instance Cloud SQL untuk PostgreSQL akan diperbarui dengan skema dan data akhir yang dihasilkan dan di-deploy.

Langkah berikutnya

Tinjau project yang di-deploy dan temukan alat lainnya:

  • Tambahkan data ke database, periksa dan ubah skema, serta pantau layanan Data Connect di Firebase console.

Akses informasi selengkapnya dalam dokumentasi. Misalnya, karena Anda telah menyelesaikan panduan memulai: