Рубрики
Без рубрики

Сохранение данных в Firebase с помощью Rest API

В этом руководстве будет показано, как подключиться к базе данных Firebase Firestore и сохранить данные с помощью rest w… С тегом tutorial, beginners, java, firebase.

В этом руководстве будет показано, как подключиться к базе данных Firebase Firestore и сохранить данные с помощью веб-служб rest.

Для этого начнем с веб-службы rest, которую мы создали с помощью spring boot в предыдущем сообщении в блоге Build Restful web service с использованием Spring boot и Java.

Если вы любитель видео, вот видео, в котором демонстрируется подключение к Firebase и сохранение данных

Перейти к firebase.google.com и нажмите на кнопку перейти к консоли в правом верхнем углу, она приведет вас к консоли, как показано ниже. Нажмите на кнопку Добавить проект и дайте ему имя.

После создания он приведет вас на страницу консоли вашего проекта, как показано ниже, нажмите на базу данных и создайте коллекцию с именем “пользователи”.

После создания коллекции мы перейдем на вкладку настройки проекта -> Учетные записи служб , чтобы сгенерировать ключ и сохранить его в вашем проекте, который мы будем использовать для подключения к базе данных firebase firestore. Мы также возьмем фрагмент конфигурации admin SDK для java.

Теперь откройте pom.xml и добавьте администратора google firebase Зависимость от SDK


    com.google.firebase
    firebase-admin
    6.11.0
 

Добавьте файл с именем Firebase Initialize, который мы будем использовать для установления соединения с firebase во время запуска приложения. Класс выглядит следующим образом.

package com.example.demo.service;

import java.io.FileInputStream;

import javax.annotation.PostConstruct;

import org.springframework.stereotype.Service;
import com.google.auth.oauth2.GoogleCredentials;

import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;

@Service
public class FirebaseInitialize {

    @PostConstruct
    public void initialize() {
        try {
        FileInputStream serviceAccount =
                  new FileInputStream("./serviceAccount.json");

                FirebaseOptions options = new FirebaseOptions.Builder()
                  .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                  .setDatabaseUrl("https://fir-demo-8920f.firebaseio.com")
                  .build();

                FirebaseApp.initializeApp(options);
    } catch (Exception e) {
        e.printStackTrace();
    }

}
}

@@@@Service Аннотация позволяет spring bootup знать, что это класс сервиса и его необходимо привязать. @PostConstruct Аннотация указывает, что функция initialize() должна выполняться перед запуском приложения, поэтому она создает соединение с firebase. У нас есть код, который мы скопировали из консоли firebase на предыдущем шаге, вставленном здесь. Первая строка читает service Account.json , который мы сгенерировали на странице настроек проекта firebase с шага 1. Он подключается к firebase с помощью Firebase App.initialize App с помощью опции сборки с использованием Firebase Options Builder , которая будет иметь учетные данные, которые мы извлекли из ServiceAccount.json и databaseURL.

Теперь мы напишем класс службы Firebase, который будет иметь четыре функции для выполнения операций crud, создать пользователя (для создания нового пользователя) , обновить пользователя (для обновления существующего пользователя) , getUserDetails(для получения сведений о пользователе) , ,

package com.example.demo.service;

import java.util.concurrent.ExecutionException;

import org.springframework.stereotype.Service;

import com.example.demo.objects.Person;
import com.google.api.core.ApiFuture;
import com.google.cloud.firestore.DocumentReference;
import com.google.cloud.firestore.DocumentSnapshot;
import com.google.cloud.firestore.Firestore;
import com.google.cloud.firestore.WriteResult;
import com.google.firebase.cloud.FirestoreClient;

@Service
public class FirebaseService {

    public String saveUserDetails(Person person) throws InterruptedException, ExecutionException {
        Firestore dbFirestore = FirestoreClient.getFirestore();
        ApiFuture collectionsApiFuture = dbFirestore.collection("users").document(person.getName()).set(person);
        return collectionsApiFuture.get().getUpdateTime().toString();
    }

    public Person getUserDetails(String name) throws InterruptedException, ExecutionException {
        Firestore dbFirestore = FirestoreClient.getFirestore();
        DocumentReference documentReference = dbFirestore.collection("users").document(name);
        ApiFuture future = documentReference.get();

        DocumentSnapshot document = future.get();

        Person person = null;

        if(document.exists()) {
            person = document.toObject(Person.class);
            return person;
        }else {
            return null;
        }
    }

    public String updateUserDetails(Person person) throws InterruptedException, ExecutionException {
        Firestore dbFirestore = FirestoreClient.getFirestore();
        ApiFuture collectionsApiFuture = dbFirestore.collection("users").document(person.getName()).set(person);
        return collectionsApiFuture.get().getUpdateTime().toString();
    }

    public String deleteUser(String name) {
        Firestore dbFirestore = FirestoreClient.getFirestore();
        ApiFuture writeResult = dbFirestore.collection("users").document(name).delete();
        return "Document with ID "+name+" has been deleted";
    }
}

У нас будет этот класс, также определенный с помощью аннотации @Service , чтобы он был доступен для автоматической проводки. Поскольку подключение к базе данных было инициализировано ранее, мы извлекем базу данных здесь, чтобы выполнить с ней операции.

Firestore dbFirestore = FirestoreClient.getFirestore();

это создаст экземпляр клиентского объекта firestore, который мы будем использовать для доступа к созданным нами коллекциям.

ApiFuture collectionsApiFuture = dbFirestore.collection("users").document(person.getName()).set(person)

эта строка синтаксиса получает коллекцию “пользователи” и пытается создать документ с идентификатором (в нашем случае я устанавливаю идентификатор в качестве имени пользователя), если он не нашел документ с указанным идентификатором, он создаст новый документ с объектом Person. Если идентификатор уже существует, он обновит документ, если вы используете функцию UpdateUser, она будет иметь ту же логику, что и CreateUser. Для удаления пользователя синтаксис было бы

dbFirestore.collection("users").document(person.getName())

Если у вас возникли проблемы с выполнением руководства, вот видео, в котором демонстрируется полное руководство.

Оригинал: “https://dev.to/nagarajendra/persist-data-to-firebase-with-rest-api-217n”