بدء استخدام Firebase SQL Connect

يساعدك هذا التشغيل السريع في بدء استخدام Firebase SQL Connect لـ ربط تطبيقات الويب والأجهزة الجوّالة بقاعدة بيانات PostgreSQL. ستتمكّن مما يلي:

  • إعداد دليل مشروعك المحلي Firebase SQL Connect باستخدام VS Code وFirebase CLI.
  • إنشاء مخططات واستعلامات وعمليات تغيير SQL Connect استنادًا إلى أفكار تطبيقك باللغة الطبيعية
  • استخدام حِزم SDK ذات الأنواع المحدّدة بدقة في تطبيقاتك لتشغيل SQL Connect استعلامات وعمليات تغيير
  • توفير Cloud SQL لمثيل PostgreSQL ومخطط SQL Connect واستعلامات وعمليات تغيير

إعداد دليل مشروع على جهاز المستخدم

يمكنك تثبيت أدوات التطوير المحلية لـ SQL Connect بطريقتَين.

  1. في دليل مشروع، شغِّل الأمر التالي.

    يُثبِّت النص البرمجي Firebase CLI و إضافة SQL Connect VS Code، ويرشدك خلال firebase init dataconnect لإعداد مشروعك. إذا لم يكن لديك إصدار سطح المكتب من VS Code مثبَّتًا، يفتحه النص البرمجي في متصفح.

    curl -sL https://firebase.tools/init/dataconnect | editor=true bash
  2. افتح شاشة إضافة SQL Connect VS Code من خلال النقر على رمز Firebase في اللوحة اليمنى من Visual Studio Code.

  3. انقر على بدء المحاكيات لتشغيل المحاكي باستخدام قاعدة بيانات PGlite محلية.

مراجعة المخطط

Firebase SQL Connect يستخدم لغة GraphQL لتحديد نموذج البيانات. تربط توجيهات @table نوع GraphQL بجدول PostgreSQL. ترتبط الحقول في النوع بأعمدة PostgreSQL. يمكنك تحديد العلاقات بين الجداول باستخدام الحقول التي تشير إلى أنواع @table أخرى، بما في ذلك العلاقات بين عناصر متعددة باستخدام جداول الربط مع مفاتيح أساسية مركّبة.

في الإعداد التلقائي، يمكنك العثور على ملفات مخطط SQL 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")
}

مزيد من المعلومات عن مخططاتSQL Connect

تطوير الاستعلامات وعمليات التغيير

Firebase SQL Connect يستخدم لغة GraphQL للاستعلامات وعمليات التغيير. يمكنك تحديد هذه الاستعلامات وعمليات التغيير في ملفات .gql واستدعاؤها بالاسم من تطبيقك. توفّر بنية GraphQL حِزم SDK ذات الأنواع المحدّدة بدقة وواجهة برمجة تطبيقات مرنة لجلب البيانات الدقيقة التي يحتاجها تطبيقك.

إضافة بيانات أولية في قاعدة البيانات

عند تشغيل المحاكي، يمكنك إضافة بيانات أولية إليه. يمكنك استخدام الملف dataconnect/seed_data.gql المقدَّم أو كتابة عمليات التغيير الخاصة بك.

استخدِم الزر تشغيل (محلي) في Code Lens في VS Code لتنفيذ عمليات التغيير وملء قاعدة بيانات PGlite المحلية.

زر تشغيل CodeLens لخدمة Firebase SQL Connect

مراجعة الاستعلامات وعمليات التغيير

في الإعداد التلقائي، يمكنك العثور على SQL 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 }
    }
  }
}

SQL Connect يساعدك في إنشاء استعلامات وعمليات تغيير آمنة باستخدام مصادقة Firebase.

للحفاظ على أمان تطبيقك، لا يمكن لتطبيقات الويب والأجهزة الجوّالة الوصول إلى SQL 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
    }
  )
}

مزيد من المعلومات عن استعلامات SQL Connect مزيد من المعلومات عن عمليات تغيير SQL Connect مزيد من المعلومات عن مصادقة SQL Connect

إنشاء الاستعلامات وعمليات التغيير

لست بحاجة إلى أن تكون خبيرًا في GraphQL لاستخدام SQL Connect بفعالية. يمكنك إنشاء استعلامات وعمليات تغيير في SQL Connect من أوصاف باللغة الطبيعية.

في أي ملف .gql، اكتب # لبدء تعليق ووصف استعلام أو عملية تغيير. بعد ذلك، استخدِم الزر إنشاء العملية/تحسينها في Code Lens لإنشاء عملية GraphQL.

زر "إنشاء" في CodeLens لربط Firebase SQL

استخدام حزمة SDK التي تم إنشاؤها في تطبيقك

يضبط الأمر firebase init dataconnect تلقائيًا حِزم SDK الآمنة من حيث النوع للتطبيقات في مشروعك. إذا لزم الأمر، يمكنك إضافة حزمة SDK يدويًا باستخدام الزر إضافة حزمة SDK إلى التطبيق في إضافة SQL Connect 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';
    
    • اضبط تطبيقك للاتصال بمحاكي SQL Connect:
    import { connectDataConnectEmulator } from 'firebase/data-connect';
    
    const dataConnect = getDataConnect(connectorConfig);
    connectDataConnectEmulator(dataConnect, 'localhost', 9399);
    
    • استدعِ طرق SQL 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 />);
    

Swift

  1. أضِف Firebase إلى تطبيق iOS.
  2. لاستخدام حزمة تطوير البرامج (SDK) التي تم إنشاؤها، اضبطها كاعتمادية في Xcode.

    في شريط التنقّل العلوي في Xcode، انقر على ملف > إضافة موارد الاعتمادية للحزمة > إضافة محليًا، واختَر المجلد الذي يحتوي على Package.swift الذي تم إنشاؤه.

  3. في المفوّض الرئيسي لتطبيقك:

    • استورِد حزمة SQL 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
      
    • اضبط تطبيقك للاتصال بمحاكي SQL 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)
      
    • استدعِ طرق SQL 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()
          }
      }
      

‫Kotlin Android

  1. أضِف Firebase إلى تطبيق Android.
  2. لاستخدام حزمة تطوير البرامج (SDK) التي تم إنشاؤها، اضبط SQL 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
    
    • اضبط تطبيقك للاتصال بمحاكي SQL 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)
      }
    
    • استدعِ طرق SQL 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
          }
        }
      }
    }
    

Flutter

  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';
    
    • اضبط تطبيقك للاتصال بمحاكي SQL 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());
    }
    
    • استدعِ طرق SQL 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 SQL Connect.

  2. انقر على الزر النشر في مرحلة الإنتاج في إضافة SQL Connect VS Code أو شغِّل في الوحدة الطرفية:

    firebase deploy --only dataconnect
    

    بعد النشر، يمكنك عرض المخطط وتشغيل الاستعلامات وعمليات التغيير في الـ Firebase console (انتقِل إلى قواعد البيانات والتخزين > SQL Connect).

مزيد من المعلومات عن dataconnect.yaml مزيد من المعلومات عن كيفية عمل SQL Connect مع Cloud SQL

الخطوات التالية

بعد إكمال التشغيل السريع، إليك بعض الخطوات التالية: