Современная разработка веб- и мобильных приложений требует эффективных решений для хранения данных, аутентификации пользователей и управления ресурсами. Firebase – это облачная платформа от Google, которая предоставляет широкий набор инструментов для создания и масштабирования приложений без необходимости развертывания собственного сервера.
Firebase – это платформа для бэкенд-разработки, предоставляющая облачные сервисы, которые помогают разработчикам быстро и удобно создавать приложения. Она предлагает готовые решения для хранения данных, аутентификации, хостинга и многого другого, устраняя необходимость в сложной серверной инфраструктуре.
Firebase легко интегрируется с популярными фронтенд-фреймворками, такими как Vue.js, React, Angular, а также используется в мобильной разработке для Android и iOS.
Firebase включает в себя несколько ключевых сервисов, которые помогают разработчикам быстро реализовать функциональность приложения:
Firebase обладает рядом преимуществ, которые делают его удобным для веб- и мобильных разработчиков:
Использование Firebase значительно упрощает разработку современных приложений, сокращая время на создание серверной инфраструктуры. В рамках данной лабораторной работы мы создадим веб-приложение с Vue.js, которое будет использовать Cloud Firestore для хранения данных.
Шаг 1. Создать проект Firebase
Откройте консоль Firebase (https://console.firebase.google.com) и войдите в аккаунт Google.
Нажмите “Create a Firebase project”. Введите название проекта: <группа>-<фамилия>. Используйте настройки по умолчанию и завершите создание проекта.
Project Overview, под заголовком Get started by adding Firebase to your app нажмите кнопку </> (Web).
My Web App).Also set up Firebase Hosting for this app.Authentication → Sing-in method.Шаг 2. Создать создать сервер
Откройте консоль GCP (https://console.cloud.google.com) и войдите в аккаунт Google.
Выберите проект IMI-SVFU.
Перейдите в сервис Compute Engine → Виртуальные машины.
Create instance.
<группа>-<фамилия>.europe-north1 (Finland) либо europe-north2 (Stockholm). cat /etc/os-release
sudo -i. sudo npm install --global firebase-tools
Шаг 3. Создать код приложения
sudo apt install git
git clone https://github.com/firebase/friendlyeats-web
cd friendlyeats-web/vanilla-js
sudo npm install -g firebase-tools
default):
firebase login --no-localhost
firebase use --add
Внесите изменения в код в файле scripts/FriendlyEats.Data.js:
nano scripts/FriendlyEats.Data.js
Разверните приложение:
firebase deploy
В консоли Firestore, откройте раздел Hosting, найдите URL и откройте приложение.
FriendlyEats.prototype.addRestaurant = function(data) {
var collection = firebase.firestore().collection('restaurants');
return collection.add(data);
};
FriendlyEats.prototype.getAllRestaurants = function(renderer) {
var query = firebase.firestore()
.collection('restaurants')
.orderBy('avgRating', 'desc')
.limit(50);
this.getDocumentsInQuery(query, renderer);
};
FriendlyEats.prototype.getDocumentsInQuery = function(query, renderer) {
query.onSnapshot(function(snapshot) {
if (!snapshot.size) return renderer.empty(); // Display "There are no restaurants".
snapshot.docChanges().forEach(function(change) {
if (change.type === 'removed') {
renderer.remove(change.doc);
} else {
renderer.display(change.doc);
}
});
});
};
FriendlyEats.prototype.getRestaurant = function(id) {
return firebase.firestore().collection('restaurants').doc(id).get();
};
FriendlyEats.prototype.getFilteredRestaurants = function(filters, renderer) {
var query = firebase.firestore().collection('restaurants');
if (filters.category !== 'Any') {
query = query.where('category', '==', filters.category);
}
if (filters.city !== 'Any') {
query = query.where('city', '==', filters.city);
}
if (filters.price !== 'Any') {
query = query.where('price', '==', filters.price.length);
}
if (filters.sort === 'Rating') {
query = query.orderBy('avgRating', 'desc');
} else if (filters.sort === 'Reviews') {
query = query.orderBy('numRatings', 'desc');
}
this.getDocumentsInQuery(query, renderer);
};
FriendlyEats.prototype.addRating = function(restaurantID, rating) {
var collection = firebase.firestore().collection('restaurants');
var document = collection.doc(restaurantID);
var newRatingDocument = document.collection('ratings').doc();
return firebase.firestore().runTransaction(function(transaction) {
return transaction.get(document).then(function(doc) {
var data = doc.data();
var newAverage =
(data.numRatings * data.avgRating + rating.rating) /
(data.numRatings + 1);
transaction.update(document, {
numRatings: data.numRatings + 1,
avgRating: newAverage
});
return transaction.set(newRatingDocument, rating);
});
});
};