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

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

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

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

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

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

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

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

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

    Чтобы быстро проверить, добавили ли вы данные в Cloud Firestore, используйте средство просмотра данных в консоли Firebase.

    Вы также можете использовать метод 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");
          }
        });

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

    Чтобы узнать больше о работе с Core и Pipeline, ознакомьтесь со следующими статьями: