Предыстория: у моего брата есть интернет-бизнес, небольшой магазин. Это было готовое к использованию PHP-решение, но с годами мне пришлось потратить много времени на его поддержку, и вы можете себе представить, что это утомительная задача. Поэтому однажды я решил упростить магазин и перестроить его, используя современный стек.
Но что такое современный стек? Я хотел отказаться от виртуальной машины digitalocean и неподдерживаемой PHP CMS, которая не давала достаточно возможностей, и в то же время сократить расходы. Таким образом, firebase и индивидуальное решение preact казались хорошим выбором.

В настоящее время Firebase предоставляет множество функций (если вы не знакомы с ними, я предлагаю пойти и проверить их) В этом посте я собираюсь поговорить о: облачных функциях, базе данных Firestore, Auth + с использованием MailGun и Braintree.

Функции Firebase представляют собой простую концепцию: вы пишете JS-функцию, которая реагирует на событие (например, HTTP-запрос или изменение базы данных).

HTTP-триггер как Rest API

Для отдыха вроде API firebase дает триггеры HTTP. API похож на ExpressJS, на самом деле, вы можете быстро настроить весь сервер expresjs для обработки всех HTTP-запросов, и я сделал именно это.
Для создания такого простого интернет-магазина мне понадобилось несколько пунктов API: список продуктов, касса (Braintree) и модуль доставки

Режим информации о триггерах HTTP

Braintree для платежей

Braintree был первым выбором для поставщиков платежных услуг, поскольку поддерживает PayPal (и все мы знаем, что интеграция с PayPal болезненна). У него есть модуль nodejs, поэтому интеграция с облачными функциями проста, все, что я сделал, это создал две точки API / токен (генерирует токен для внешнего интерфейса) и / checkout (процесс оплата и сохраняет заказ в БД)



Firebase Firestore для хранения заказов

Firestore - это база данных NoSQL нового поколения. Поскольку он основан на документе, я просто вставляю в него все заказы как объект JSON.

Функции Firebase + MailGun

Каждый раз, когда новый заказ добавляется в базу данных Firestore, он запускает функцию, которая отправляет электронное письмо с подтверждением покупателю и администратору магазина. Для отправки писем я использую MailGun, почтовый сервис предоставляет 10000 бесплатных писем в месяц, что достаточно для малого бизнеса.

Функции Firebase для изменения размера и оптимизации изображений

Еще одна проблема, с которой я столкнулся, - предоставить адаптивные изображения в разных форматах (jpg / webp), на самом деле это было проще, чем ожидалось. Firebase имеет триггер, который активируется каждый раз, когда новый файл загружается в Firebase Storage. Как вы можете догадаться, мне просто нужно загрузить свои большие изображения в хранилище firebase, и все изображения будут изменены и преобразованы в webp.

остальная часть функции resizeImage

Firebase Auth

Создание аутентификации неприятно, я делал это много раз и очень рад, что теперь я могу использовать для этого провайдера. Мне нужна была авторизация пользователя для администраторов магазина, и Firebase Auth, естественно, входит в качестве опции.

Я должен упомянуть некоторые другие интересные особенности функций Firebase, такие как CDN, бесплатный SSL, http2, хостинг статических ресурсов. Следовательно, использование таких сервисов, как Firebase, делает процесс разработки более приятным. Мне нравится тот факт, что мне не нужно обслуживать виртуальные машины, поэтому я могу сосредоточиться на том, что мне нравится.

Все примеры: https://github.com/firebase/functions-samples
Полный код проекта: https://github.com/mutebg/online-store/