🔨Mapala | О проектировании приложения для голоса.
Сокращения:
- HF - Хардфорк
- БЧ - Блокчейн
При разработке приложения Mapala Beta еще на 16HF. Сформировались проблемы мешающие нормальному функционированию приложения.
- Работа с данными БЧ.
- Изначально приложение проектировалось сразу на два БЧ steem/golos.
- Регистрация в приложении с автоматическим созданием аккаунта в блокчейне.
- SPA/SSR, SEO, sitemap.xml, итд.
Работа с данными БЧ.
Основная проблема - это работа с базой БЧ. Так как API ноды не обеспечивала необходимой гибкости выборок, было решено написать свой бек-энд который будет парсить блоки и хранить операции в удобном формате. В результате получилось удобное API, но из-за постоянных обновлений протокола и обновления структуры данных в базе, была необходимость при каждом обновлении кода, синхронизировать базу заново. Так же API было ориентированно только для работы с приложением Mapala.
С выходом 18HF команда голоса обрадовала нас релизом mongo-plugin’а благодаря которому взаимодействовать с базой БЧ стало намного проще. Я решил написать GraphQL сервис для голоса на основе mongo базы. Получилось удобное API, которое можно развивать, при этом каждый раз не синхронизироваться заново. Приложение Mapala использует GolosQL для запроса аккаунтов/постов с фильтрацией по тегу приложения(mapala/ru—mapala).
Приложение проектировалось сразу на два блокчейна steem/golos.
Как следствие, блокчейны пошли по разным путям развития, соответственно поддерживать совместимость с двумя разными интерфейсами как для бек-энда так и для фронтенда стало технически сложно. Из этого было выработано правило: один БЧ - один фронтенд. Проще отдельно развивать несколько фронтендов под разные БЧ, при этом используя общие модули где это возможно.
Регистрация в приложении с автоматическим созданием аккаунта в БЧ.
Для хранения данных пользователя и авторизации использовался внутрений аккаунт, хранящийся на бекенде, а аккаунт БЧ импортировался на стороне клиента. Это создало массу проблем: несовпадение имен аккаунтов, невозможность импортировать ключи повторно в новом аккаунте(внутреннем), при регистрации пользователи не сохраняли и теряли свои приватные ключи.
Имхо, без понимания базовых принципов работы БЧ, пользователь не сможет полноценно пользоваться приложением. Регистрировать аккаунты с префиксом приложения, генерировать имена аккаунтов по OAuth авторизации со стороннего сервиса, не имеет особого смыла. Регистрация была временно отключена, функцию регистратора выполняет golos.io. Вывод: 1 аккаунт в БЧ - много фронтендов/приложений.
SPA/SSR, SEO, sitemap.xml.
Изначально фронтенд разрабатывался как SPA приложение, СЕО оставляло желать лучшего, поэтому приложение было переписано на SRR. Для добавления веса фронтенду, в конце каждого поста добавляется баннер со ссылкой на источник. Добавлен sitemap который генерируется динамически. Вывод: Приложение для медиа-БЧ должно быть СЕО оптимизированным.
Что представляет из себя приложение golos.mapala сейчас?
- Фронтенд, взаимодействующий с отрытым АПИ(GolosQL).
- Авторизация посредством posting ключа.
- Оптимизированное СЕО, SSR.
- Современные технологии веб разработки, vue/nuxt.js/es7, docker.
https://golos.mapala.net
https://github.com/avral/golos.mapala
P.S Для разработчиков.
Данное приложение можно использовать как каркас для создания приложений на блокчейне голос.
При проектировании приложения, я старался заложить максимальный уровень абстракции.
Параметры “config/index.js”, указанны параметры для golos.mapala.
- app: идентификатор приложения ->
mapala/1.1
- app_tags: летна постов фильтруется по даррым тегам
['mapala', 'ru--mapala']
- tag_for_post: первый тег в редакторе, при создании публикации ->
mapala
- pagination: количесто постов, для подгрузки в ленту для каждой итерации ->
10
Тех поддержка -> telegram: @avral