Начало работы с Firestore Enterprise с использованием клиентских библиотек сервера

В этом кратком руководстве рассказывается, как настроить Cloud Firestore, добавить данные, а затем использовать основные операции или операции конвейера, чтобы запросить данные, которые вы только что добавили в консоли Firebase, используя серверные клиентские библиотеки для Java, Node.js и Python.

Используйте эти клиентские библиотеки, чтобы настроить привилегированные серверные среды с полным доступом к вашей базе данных.

Создайте базу данных Cloud Firestore

  1. Если у вас ещё нет проекта Firebase, создайте его. Для этого в консоли Firebase нажмите Добавить проект и следуйте инструкциям на экране. Вы также можете добавить сервисы Firebase в существующий проект Google Cloud.

  2. На панели слева выберите Databases & Storage (Базы данных и хранилище) > Firestore.

  3. Нажмите Create database (Создать базу данных).

  4. В качестве режима базы данных выберите Enterprise.

  5. В качестве режима работы выберите Firestore в стандартном режиме, который поддерживает операции Core и Pipeline.

  6. Выберите местоположение для базы данных.

  7. Выберите режим запуска для устройства "Cloud Firestore Security Rules":

    Режим тестирования

    Подходит для начала работы с клиентскими библиотеками для мобильных устройств и веб-клиентов, но позволяет любому пользователю читать и перезаписывать ваши данные. После тестирования обязательно ознакомьтесь с разделом Защита данных.

    Чтобы начать работу с SDK для веб-сайтов, платформ Apple или 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. Добавьте Firebase Admin SDK в приложение:
    npm install firebase-admin --save
  2. Чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде, следуйте инструкциям ниже.
Python
  1. Добавьте Firebase Admin SDK в приложение Python:
    pip install --upgrade firebase-admin
  2. Чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде, следуйте инструкциям ниже.
Java
  1. Добавьте Firebase Admin SDK в приложение:
    • С помощью Gradle:
      implementation 'com.google.firebase:firebase-admin:9.11.0'
    • Использование Maven
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>9.11.0</version>
      </dependency>
           
  2. Чтобы инициализировать Cloud Firestore с правильными учетными данными в вашей среде, следуйте инструкциям ниже.

Инициализация Cloud Firestore

Инициализируйте экземпляр Cloud Firestore:

Node.js
Способ инициализации SDK Cloud Firestore зависит от среды. Ниже приведены наиболее распространенные методы. Полную информацию можно найти в статье Инициализация 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();
  • Инициализация на собственном сервере

    Чтобы использовать Firebase Admin SDK на собственном сервере (или в любой другой среде Node.js), используйте сервисный аккаунт. В консоли Google Cloud выберите IAM & admin (IAM и администрирование) > Service accounts (Сервисные аккаунты). Сгенерируйте новый закрытый ключ и сохраните файл 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
Способ инициализации SDK Cloud Firestore зависит от среды. Ниже приведены наиболее распространенные методы. Полную информацию можно найти в статье Инициализация 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()
  • Инициализация на собственном сервере

    Чтобы использовать Firebase Admin SDK на собственном сервере, используйте сервисный аккаунт.

    В консоли Google Cloud выберите IAM & admin (IAM и администрирование) > Service accounts (Сервисные аккаунты). Создайте новый закрытый ключ и сохраните файл 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
    Способ инициализации SDK Cloud Firestore зависит от среды. Ниже приведены наиболее распространенные методы. Полную информацию можно найти в статье Инициализация 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();
  • Инициализация на собственном сервере

    Чтобы использовать Firebase Admin SDK на собственном сервере, используйте сервисный аккаунт.

    В консоли Google Cloud выберите IAM & admin (IAM и администрирование) > Service accounts (Сервисные аккаунты). Создайте новый закрытый ключ и сохраните файл 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"));
    }

    Чтение данных с помощью операций конвейера

    Теперь вы можете сравнить работу с запросами в Pipeline и Core.

    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");
          }
        });

    Дальнейшие действия

    Углубите свои знания об основных операциях и операциях с конвейером, изучив следующие темы: