Firebase и бэкэнд-логика
Я пользователь parse.com, и теперь я ищу другую услугу.
Как я могу записать логику конца в firebase?
скажем, я хочу проверить все значения на стороне сервера или инициировать события. Я подумал об одном решении, но хочу знать рекомендуемый способ.
Я думаю, что
- создать nodejs-сервер, который использует express.
- создайте middlewares для обработки логики.
- отправить запрос на отправку из приложения, который запускает middlewares
- используйте nodejs sdk firebase для обновления значений в соответствии с параметрами http-запроса.
- И реализовать на обработчике firebase приложения, которые прослушивают изменения
![введите описание изображения здесь]()
их что-то проще? В синтаксисе я использовал код облака, я хочу, чтобы логика не была на стороне клиента, а на стороне сервера.
Ответы
Ответ 1
Обновление (10 марта 2017 г.). Хотя архитектура, описанная ниже, по-прежнему действительна и может использоваться для объединения Firebase с любой существующей инфраструктурой, Firebase только что выпустила Облачные функции для Firebase, позволяющие запускать функции JavaScript на серверах Google в ответ на события Firebase (например, изменения базы данных, вход пользователей и многое другое).
Общие архитектуры приложений Firebase довольно четко определены в этом сообщении в блоге Где Firebase вписывается в ваше приложение?.
Предлагаемая вами архитектура ближе всего к архитектуре 3, где ваш код на стороне клиента работает как напрямую с Firebase, так и с вашим сервером node.js.
Я также настоятельно рекомендую рассмотреть вариант 2, где все взаимодействие между клиентами и сервером выполняется через Firebase. Отличным примером такого типа архитектуры является интеграция поиска фонарика. Клиенты пишут свои поисковые запросы в базе данных Firebase. Сервер прослушивает такие запросы, выполняет запрос и записывает ответ обратно в базу данных. Клиент ожидает ответа.
Простым контуром для этого сервера может быть:
var ref = new Firebase('https://yours.firebaseio.com/searches');
ref.child('requests').on('child_added', function(requestSnapshot) {
// TODO: execute your operation for the request
var responseRef = ref.child('responses').child(requestSnapshot.key());
responseRef.set(result, function(error) {
if (!error) {
// remove the request, since we've handled it
requestSnapshot.ref().remove();
}
});
})
Благодаря этому последнему подходу клиент никогда не разговаривает напрямую с вашим сервером, что устраняет все возможные потенциальные проблемы, о которых вам нужно беспокоиться. По этой причине я иногда называю их "ботами", а не серверами.
Ответ 2
2017
Сегодня Google анонсировала Облачные функции для Firebase
https://firebase.google.com/features/functions/
Это отличное решение для архитектуры и обратной логики в Firebase.
Ответ 3
Вот что я буду делать:
- Проверяйте все входы с помощью ". validate" rules. Для этого не нужен сервер.
- Если у вас есть задачи для запуска, используйте Firebase Queue, бот для выполнения задач, и все готово.
Если вы не сделаете последнее, у вас могут быть две проблемы:
-
Если вы попытаетесь использовать приведенную вами диаграмму, будет немного сложно получить объект auth на сервере (но не невозможно). Продолжайте, если вам не нужно проверять пользователя, чтобы разрешить запрос.
-
Если вы используете только обычное приложение firebase для прослушивания изменений и ответа (например, редактирование объекта, например, пример кода Frank van Puffelen), у вас могут возникнуть проблемы с масштабируемостью. Когда ваш задний конец масштабируется до двух (или более) экземпляров, редактирование firebase вызовет задачу для всех из них. Каждый экземпляр заметит, что произошли изменения, затем выполните одну и ту же задачу один раз, добавьте/замените объект ответа один раз и попытайтесь удалить объект запроса один раз каждый.
Использование Firebase Queue позволяет избежать обеих этих проблем.