В этом руководстве будет показано, как подключиться к базе данных 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(); ApiFuturecollectionsApiFuture = 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”