באמצעות ערכות ה-SDK של Firebase Data Connect הלקוח אפשר לקרוא לשאילתות ולמוטציות בצד השרת ישירות מאפליקציית Firebase. יוצרים במקביל SDK מותאם אישית של הלקוח כשמתכננים את הסכימות, השאילתות והמוטציות שאתם פורסים בשירות Data Connect. לאחר מכן, משלבים שיטות מ-SDK הזה לתוך הלוגיקה של הלקוח.
כפי שציינו במקום אחר, חשוב לציין ששאילתות ומוטציות של Data Connect לא נשלחות על ידי קוד הלקוח ומבוצעות בשרת. במקום זאת, כשפורסים, פעולות של Data Connect מאוחסנות בשרת כמו Cloud Functions. כלומר, צריך לפרוס את השינויים המתאימים בצד הלקוח כדי למנוע שיבושים אצל משתמשים קיימים (לדוגמה, בגרסאות ישנות יותר של האפליקציה).
לכן ב-Data Connect יש סביבת פיתוח וכלים שמאפשרים ליצור אב טיפוס של סכימות, שאילתות ומוטציות שנפרסו בשרת. בנוסף, המערכת יוצרת באופן אוטומטי ערכות SDK בצד הלקוח בזמן יצירת אב טיפוס.
אחרי שסיימתם לבצע עדכונים בשירות ובאפליקציות הלקוח, העדכונים בצד השרת ובצד הלקוח מוכנים לפריסה.
יצירת Flutter SDK
כמו ברוב הפרויקטים ב-Firebase, העבודה על קוד הלקוח של Firebase Data Connect מתבצעת בספריית פרויקט מקומית. התוסף Data Connect VS Code וה-CLI Firebase הם כלים מקומיים חשובים ליצירה ולניהול של קוד לקוח.
האפשרויות ליצירת SDK מוצמדות למספר רשומות בקובץ dataconnect.yaml
שנוצר כשאתחלתם את הפרויקט.
אתחול היצירה של ה-SDK
ב-connector.yaml
, מוסיפים את outputDir
, את package
ואת packageJsonDir
(ל-SDK לאינטרנט).
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, תוכלו לקרוא ל-CLI Firebase לביצוע עדכון בכמות גדולה.
במקרים כאלה, צריך להשתמש ב-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';
יצירת אב טיפוס ובדיקה של אפליקציות 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();
כדי לעבור למשאבי הייצור, צריך להוסיף הערה לשורות שמקשרות למהדמ.
להשתמש בשאילתות בצד הלקוח
הקוד שנוצר כבר יכלול ערכי Query 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();
}
שדות אופציונליים
יכול להיות שבחלק מהשאילתות יהיו שדות אופציונליים. במקרים כאלה, ה-SDK של Flutter חושף שיטה של בונה, וצריך להגדיר אותו בנפרד.
לדוגמה, השדה rating
הוא אופציונלי כשקוראים ל-createMovie
, לכן צריך לספק אותו בפונקציית ה-builder.
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 באופן הבא.
סוג חיבור הנתונים | Dart |
---|---|
חותמת זמן | firebase_data_connect.Timestamp |
Int (32-bit) | int |
תאריך | DateTime |
מזהה ייחודי אוניברסלי (UUID) | מחרוזת |
Int64 | int |
Float | double |
בוליאני | בוליאני |
הכול | firebase_data_connect.AnyValue |