תחילת העבודה עם מהדורת Firestore Enterprise באמצעות ספריות לקוח לשרת

במדריך הזה לתחילת העבודה נסביר איך להגדיר את Cloud Firestore, להוסיף נתונים ואז להשתמש בפעולות ליבה או בפעולות של צינורות כדי לשלוח שאילתה לנתונים שהוספתם זה עתה במסוף Firebase באמצעות ספריות לקוח של שרתים ל-Java, ל-Node.js ול-Python.

אפשר להשתמש בספריות הלקוח האלה כדי להגדיר סביבות שרת עם הרשאות מלאות לגישה למסד הנתונים.

יצירת מסד נתונים של Cloud Firestore

  1. אם עדיין לא עשיתם זאת, אתם צריכים ליצור פרויקט ב-Firebase: במסוף Firebase, לוחצים על Add project (הוספת פרויקט) ופועלים לפי ההוראות שמופיעות במסך כדי ליצור פרויקט ב-Firebase או כדי להוסיף שירותי Firebase לפרויקט Google Cloud קיים.

  2. בחלונית הימנית, עוברים אל Databases & Storage (מסדי נתונים ואחסון) >‏ Firestore.

  3. לוחצים על יצירת מסד נתונים.

  4. בוחרים באפשרות Enterprise למצב מסד הנתונים.

  5. בוחרים באפשרות Firestore במצב Native למצב הפעולה, שתומך בפעולות Core ו-Pipeline.

  6. בוחרים מיקום למסד הנתונים.

  7. בוחרים מצב התחלה ל-Cloud Firestore Security Rules:

    מצב בדיקה

    מתאים להתחלת העבודה עם ספריות לקוח לנייד ולאינטרנט, אבל מאפשר לכל אחד לקרוא ולשכתב את הנתונים. אחרי הבדיקה, חשוב לעיין בסעיף הגנה על הנתונים.

    כדי להתחיל להשתמש ב-SDK לאתרים, לפלטפורמות של אפל או ל-Android, בוחרים במצב בדיקה.

    מצב ייצור

    האפשרות הזו חוסמת את כל פעולות הקריאה והכתיבה מלקוחות ניידים ומלקוחות אינטרנט. שרתי האפליקציות המאומתים (Node.js, ‏ Python, ‏ Java) עדיין יכולים לגשת למסד הנתונים.

    הקבוצה הראשונית של Cloud Firestore Security Rules תחול על מסד הנתונים שמוגדר כברירת מחדל Cloud Firestore. אם יוצרים כמה מסדי נתונים לפרויקט, אפשר לפרוס Cloud Firestore Security Rules לכל מסד נתונים.

  8. לוחצים על יצירה.

כשמפעילים את Cloud Firestore, מופעל גם ה-API בCloud API Manager.

הגדרת סביבת הפיתוח

מוסיפים לאפליקציה את יחסי התלות הנדרשים ואת ספריות הלקוח.

Node.js
  1. מוסיפים את SDK של Firebase לאדמינים לאפליקציה:
    npm install firebase-admin --save
  2. כדי לאתחל את Cloud Firestore עם פרטי הכניסה המתאימים בסביבה שלכם, פועלים לפי ההוראות הבאות.
Python
  1. מוסיפים את SDK של Firebase לאדמינים לאפליקציית Python:
    pip install --upgrade firebase-admin
  2. כדי לאתחל את Cloud Firestore עם פרטי הכניסה המתאימים בסביבה שלכם, פועלים לפי ההוראות הבאות.
Java
  1. מוסיפים את SDK של Firebase לאדמינים לאפליקציה:
    • באמצעות Gradle:
      implementation 'com.google.firebase:firebase-admin:9.9.0'
    • שימוש ב-Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>9.9.0</version>
      </dependency>
           
  2. כדי לאתחל את Cloud Firestore עם פרטי הכניסה המתאימים בסביבה שלכם, פועלים לפי ההוראות הבאות.

אתחול Cloud Firestore

מאתחלים מופע של Cloud Firestore:

Node.js
ההפעלה של Cloud Firestore SDK מתבצעת בדרכים שונות בהתאם לסביבה שלכם. בהמשך מפורטות השיטות הנפוצות ביותר. לעיון בהפניה מלאה, אפשר לעבור אל הפעלת Admin SDK.
  • הפעלה ראשונית בתאריך Cloud Functions
    const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
    const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
    initializeApp();
    
    const db = getFirestore();
    
  • הפעלה ראשונית בתאריך Google Cloud
    const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
    const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
    initializeApp({
      credential: applicationDefault()
    });
    
    const db = getFirestore();
  • הפעלה בשרת שלכם

    כדי להשתמש ב-SDK של Firebase לאדמינים בשרת שלכם (או בכל סביבת Node.js אחרת), צריך להשתמש בחשבון שירות. נכנסים אל IAM & admin > Service accounts במסוף Google Cloud. יוצרים מפתח פרטי חדש ושומרים את קובץ ה-JSON. לאחר מכן משתמשים בקובץ כדי לאתחל את ה-SDK:

    const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
    const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
    const serviceAccount = require('./path/to/serviceAccountKey.json');
    
    initializeApp({
      credential: cert(serviceAccount)
    });
    
    const db = getFirestore();
    
Python
ההפעלה של Cloud Firestore SDK מתבצעת בדרכים שונות בהתאם לסביבה שלכם. בהמשך מפורטות השיטות הנפוצות ביותר. לעיון בהפניה מלאה, אפשר לעבור אל הפעלת Admin SDK.
  • הפעלה ראשונית בתאריך Google Cloud
    import firebase_admin
    from firebase_admin import firestore
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore.client()

    אפשר גם להשתמש בפרטי כניסה קיימים שמוגדרים כברירת מחדל באפליקציה כדי לאתחל את ה-SDK.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore.client()
  • הפעלה בשרת שלכם

    כדי להשתמש ב-SDK של Firebase לאדמינים בשרת שלכם, צריך להשתמש בחשבון שירות.

    עוברים אל IAM ואדמין > חשבונות שירות במסוף Google Cloud. יוצרים מפתח פרטי חדש ושומרים את קובץ ה-JSON. לאחר מכן משתמשים בקובץ כדי לאתחל את ה-SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore.client()
  • Java
    ההפעלה של Cloud Firestore SDK מתבצעת בדרכים שונות בהתאם לסביבה שלכם. בהמשך מפורטות השיטות הנפוצות ביותר. לעיון בהפניה מלאה, אפשר לעבור אל הפעלת Admin SDK.
  • הפעלה ראשונית בתאריך Google Cloud
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use the application default credentials
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .setProjectId(projectId)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • הפעלה בשרת שלכם

    כדי להשתמש ב-SDK של Firebase לאדמינים בשרת שלכם, צריך להשתמש בחשבון שירות.

    עוברים אל IAM ואדמין > חשבונות שירות במסוף Google Cloud. יוצרים מפתח פרטי חדש ושומרים את קובץ ה-JSON. לאחר מכן משתמשים בקובץ כדי לאתחל את ה-SDK:

    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use a service account
    InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • הוספת נתונים באמצעות פעולות ליבה

    כדי לבחון פעולות ליבה ופעולות של צינורות להעברת נתונים לצורך שליפת נתונים, צריך להוסיף נתונים למסד הנתונים באמצעות פעולות ליבה.

    Cloud Firestore מאחסן נתונים במסמכים, שמאוחסנים באוספים. בפעם הראשונה שמוסיפים נתונים למסמך, Cloud Firestore יוצר אוספים ומסמכים באופן מרומז. אין צורך ליצור אוספים או מסמכים באופן מפורש.

    יוצרים אוסף ומסמך חדשים באמצעות קוד הדוגמה הבא.

    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Java
    DocumentReference docRef = db.collection("users").document("alovelace");
    // Add document data  with id "alovelace" using a hashmap
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Ada");
    data.put("last", "Lovelace");
    data.put("born", 1815);
    //asynchronously write data
    ApiFuture<WriteResult> result = docRef.set(data);
    // ...
    // result.get() blocks on response
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection("users").document("alovelace")
    doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})

    קריאת נתונים באמצעות פעולות מרכזיות

    אפשר להשתמש בכלי להצגת נתונים במסוף Firebase כדי לוודא במהירות שהוספתם נתונים ל-Cloud Firestore.

    אפשר גם להשתמש בשיטת get כדי לאחזר את האוסף כולו.

    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Python
    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")
    Java
    // asynchronously retrieve all users
    ApiFuture<QuerySnapshot> query = db.collection("users").get();
    // ...
    // query.get() blocks on response
    QuerySnapshot querySnapshot = query.get();
    List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      System.out.println("User: " + document.getId());
      System.out.println("First: " + document.getString("first"));
      if (document.contains("middle")) {
        System.out.println("Middle: " + document.getString("middle"));
      }
      System.out.println("Last: " + document.getString("last"));
      System.out.println("Born: " + document.getLong("born"));
    }

    קריאת נתונים באמצעות פעולות של צינורות

    עכשיו אפשר להשוות בין חוויית השימוש בשאילתת הצינור לבין חוויית השימוש בשאילתת הליבה.

    Node.js
    const readDataPipeline = db.pipeline()
      .collection("users");
    
    // Execute the pipeline and handle the result
    try {
      const querySnapshot = await readDataPipeline.execute();
      querySnapshot.results.forEach((result) => {
        console.log(`${result.id} => ${result.data()}`);
      });
    } catch (error) {
        console.error("Error getting documents: ", error);
    }
    Python
    pipeline = client.pipeline().collection("users")
    for result in pipeline.execute():
        print(f"{result.id} => {result.data()}")
    Java
    Pipeline pipeline = firestore.pipeline().collection("users");
    ApiFuture<Pipeline.Snapshot> future = pipeline.execute();
    for (com.google.cloud.firestore.PipelineResult result : future.get().getResults()) {
      System.out.println(result.getId() + " => " + result.getData());
    }
    // or, asynchronously
    pipeline.execute(
        new ApiStreamObserver<com.google.cloud.firestore.PipelineResult>() {
          @Override
          public void onNext(com.google.cloud.firestore.PipelineResult result) {
            System.out.println(result.getId() + " => " + result.getData());
          }
    
          @Override
          public void onError(Throwable t) {
            System.err.println(t);
          }
    
          @Override
          public void onCompleted() {
            System.out.println("done");
          }
        });

    השלבים הבאים

    כדי להרחיב את הידע שלכם בנושא פעולות מרכזיות ופעולות בצינורות, תוכלו לעיין בנושאים הבאים: