Архитектура мобильного приложения интернет-магазина | FITTIN
+7 (800) 444-11-27
Позвоните — обсудим ваш проект
Сергей CCO FITTIN
Сергей CCO FITTIN
Напишите мне в Telegram
Обсудить проект
Архитектура мобильного приложения интернет-магазина: смартфон с витриной и слои серверной части, обложка статьи FITTIN

Архитектура мобильного приложения: как устроено приложение интернет-магазина

Покупатель видит в приложении магазина каталог, корзину и оплату. За этими экранами работают серверная часть, копии данных и обмен с учётной системой, CRM и банком. От того, как связаны эти части, зависят скорость каталога, устойчивость в распродажу и цена каждой доработки. Дальше — из каких слоёв состоит приложение, как устроены кэш каталога и интеграции, как следить за ошибками и какие архитектурные решения обходятся дороже всего.


Что такое архитектура мобильного приложения простыми словами

Архитектура мобильного приложения — это схема того, из каких частей состоит приложение, за что отвечает каждая часть и как они обмениваются данными. Для интернет-магазина это не только код на телефоне покупателя. Приложение — видимая часть системы, у которой есть собственный сервер, база данных и связи с учётной системой, CRM, банком и службами доставки.

Удобно представить офлайн-магазин. Торговый зал с витринами — это экраны приложения. Склад и товароведы — серверная часть, которая хранит каталог и знает остатки. Бухгалтерия — учётная система, например 1С. Касса и терминал — эквайринг. Если продавец за каждой вещью бежит в бухгалтерию, очередь растёт. Если склад и касса не сверяют остатки, магазин продаёт то, чего нет. В приложении те же проблемы решает архитектура.

Типичное приложение интернет-магазина состоит из трёх больших частей:

  • Клиентская часть. Приложение на iPhone и Android: экраны, навигация, корзина, хранение последних загруженных данных на устройстве.
  • Серверная часть. Программа на сервере компании: копия каталога, расчёт корзины и скидок, приём заказов, отправка push-уведомлений, журнал ошибок.
  • Внешние системы. Учётная система, CRM и программа лояльности, эквайринг, службы доставки, маркетплейсы, сервисы аналитики.

Части общаются через API — программный интерфейс, набор договорённостей, какие запросы можно отправить и в каком виде придёт ответ. Как проектируют такой интерфейс, разобрано в статье о проектировании REST API. Разработчики Flutter и Android описывают похожее разделение в официальных руководствах: Guide to app architecture для Flutter и руководство по архитектуре Android-приложений.

Зачем архитектура владельцу интернет-магазина

Покупатель не видит архитектуру, но замечает её последствия: каталог открывается за секунду или за пять, заказ доходит до склада или теряется, скидка в приложении совпадает с сайтом или нет. Для бизнеса архитектура влияет на четыре вещи.

  1. Выручка в пиковые дни. В распродажу нагрузка вырастает в разы. Если каждый просмотр товара превращается в запрос к учётной системе, она перестаёт отвечать, и покупатели уходят. Подготовку к пикам подробно описывает материал о высоконагруженных системах в e-commerce.
  2. Цена доработок. Когда модули разделены, новую механику лояльности добавляют, не трогая корзину и оплату. Когда всё связано со всем, любая правка требует проверки всего приложения и дорожает.
  3. Скорость обновлений. Часть изменений — баннеры, подборки, тексты акций, порядок блоков на главной — можно менять с сервера без новой версии в App Store и Google Play. Остальное требует выпуска версии и проверки магазина приложений.
  4. Независимость от подрядчика. Понятная структура, документация и разделённые модули позволяют передать проект другой команде без переписывания. Запутанную архитектуру новой команде проще переписать, чем понять.

Если приложение уже работает и вызывает вопросы по стабильности или стоимости изменений, начинают с аудита кода — он показывает, как устроены связи между частями и что мешает развитию.

Слои приложения: от экрана до учётной системы

Внутри клиентской и серверной частей код делят на слои. Каждый слой решает одну задачу и знает о соседях ровно столько, сколько нужно для работы. Благодаря этому экран каталога можно перерисовать, не трогая правила расчёта цены, а учётную систему — сменить, не выпуская новую версию приложения.

Слой Где работает За что отвечает Пример в приложении магазина
Интерфейс Телефон Экраны, кнопки, анимации, навигация Карточка товара с галереей, выбор размера, кнопка «В корзину»
Состояние экрана Телефон Что показать сейчас: данные, загрузку или ошибку Счётчик товаров в корзине обновляется на всех экранах сразу
Данные на устройстве Телефон Запросы к серверу и локальные копии данных Последний загруженный каталог, избранное, сохранённый вход
API серверной части Сервер Принимает запросы приложения и отдаёт данные в удобном для экрана виде Один запрос возвращает карточку товара с ценой, остатком и отзывами
Бизнес-логика Сервер Правила магазина: цены, скидки, бонусы, способы доставки Расчёт корзины с промокодом, списанием баллов и стоимостью доставки
Хранилище и кэш Сервер База данных и быстрые копии часто запрашиваемых данных Каталог, заказы, профили покупателей, готовые ответы для популярных категорий
Интеграции Сервер Обмен данными с внешними системами и повтор при сбоях Выгрузка заказа в 1С, запрос баланса в CRM, статус платежа от банка

Главное правило разделения: правила бизнеса живут на сервере, а не в приложении. Если скидка считается в коде на телефоне, для её изменения нужна новая версия приложения, а у части покупателей ещё месяцы будет стоять старая. Кроме того, приложение и сайт начинают считать цены по-разному. Когда расчёт один и находится на сервере, сайт и приложение показывают одну цену, а правило меняют один раз.

На клиентской стороне Flutter позволяет держать интерфейс, состояние и работу с данными в одном коде для iOS и Android. Как устроен фреймворк, объясняет материал что такое Flutter, а на чём теряется скорость отрисовки экранов — разбор производительности Flutter-приложения.

Слои приложения интернет-магазина: башня из пластин с интерфейсом, правилами цен, базой данных и серверами, связанная со смартфоном

Модули: каталог, корзина, оплата и лояльность по отдельности

Слои делят код по горизонтали, модули — по вертикали, по функциям магазина. Модуль объединяет всё, что относится к одной функции: экраны, правила и обмен данными. Хорошо разделённые модули общаются друг с другом через понятные точки входа и не лезут во внутренности соседей.

Модуль За что отвечает С какими системами связан
Каталог товаров и категорий Дерево категорий, карточки, фото, характеристики, варианты товара Учётная система или система управления товарной информацией
Поиск и фильтры Подсказки при вводе, исправление опечаток, фильтры по характеристикам Поисковый движок на серверной части
Корзина и оформление заказа Состав заказа, пересчёт, адреса, способы получения Учётная система, службы доставки, программа лояльности
Оплата Банковские карты, СБП, статусы и возвраты платежей Эквайринг и платёжные сервисы
Личный кабинет Вход, профиль, история заказов, адреса, удаление аккаунта Сервис подтверждения по телефону, CRM
Программа лояльности и бонусы Баланс, уровни, начисление и списание баллов, виртуальная карта CRM или собственная система лояльности
Push-уведомления Статусы заказов, брошенная корзина, рассылки по сегментам Сервисы уведомлений Apple и Google, CRM
Сториз и баннеры Акции, подборки и главная страница без выпуска новой версии Админ-панель магазина
Аналитика и события Просмотры, добавления в корзину, покупки, воронка Сервисы аналитики, CRM
Мониторинг ошибок Сбои приложения и сервера, неудачные оплаты и обмены Сервис сбора ошибок, оповещения команды

Разделение на модули даёт бизнесу две выгоды. Первая — доработку одного модуля проверяют прицельно, и новая механика лояльности не ломает оплату. Вторая — проверенный модуль переносится между проектами: каталог и корзина одинаково нужны магазину одежды и магазину товаров для дома, отличаются настройки и дизайн. Какие функции обязательны в приложении магазина, перечислено в статье о функциях мобильного приложения интернет-магазина.

Модули приложения магазина: лоток с плитками каталога, поиска, оплаты, лояльности и уведомлений, одну плитку заменяет манипулятор

Данные и кэш каталога: почему приложение не ходит в 1С за каждым товаром

Учётная система хранит правду о товарах, ценах и остатках, но не рассчитана на тысячи одновременных запросов от покупателей. Поэтому приложение берёт каталог не из 1С напрямую, а из собственной копии на серверной части. Эту копию регулярно обновляют из учётной системы.

Кэш — это быстрая временная копия данных, которую отдают вместо повторного обращения к первоисточнику. В приложении магазина кэш бывает на двух уровнях:

  • На серверной части. Готовые ответы для популярных категорий и карточек лежат в быстрой памяти. Тысяча покупателей, открывших одну категорию, получают один и тот же готовый ответ, и база данных не пересчитывает его тысячу раз.
  • На устройстве. Приложение сохраняет последние загруженные экраны, фото и избранное. Каталог открывается сразу, а обновлённые данные подгружаются следом. При слабой связи покупатель видит последнюю загруженную версию, а не пустой экран.

Сложность кэша — в сроке годности данных. Описание товара может жить в копии часами, а остаток популярного размера меняется каждую минуту. Поэтому для разных данных устанавливают разное время жизни копии и разные правила обновления.

Данные Источник Где хранится копия Как обновляется
Категории, описания, характеристики Учётная система Серверная часть и устройство По расписанию, передаются только изменившиеся позиции
Цены и остатки Учётная система Серверная часть, короткое время жизни копии Чаще каталога; перед оплатой — обязательная сверка с источником
Фото товаров Хранилище файлов Сеть доставки контента и устройство При замене файла; размер подбирается под экран телефона
Баннеры, сториз, подборки Админ-панель магазина Серверная часть и устройство Сразу после публикации в админ-панели
Бонусный баланс CRM или система лояльности Устройство показывает последнее значение Запрос при открытии профиля и при расчёте корзины
Корзина, заказ, платёж Серверная часть и банк Не кэшируются как источник данных Каждое действие проходит через сервер в момент операции

Сеть доставки контента (CDN) — это набор серверов в разных городах, который отдаёт фото товаров с ближайшего к покупателю узла. Для каталога с тысячами позиций именно картинки составляют основной объём загрузки, поэтому их оптимизация заметна сильнее, чем ускорение кода. Как Flutter-приложение хранит данные на устройстве и работает при плохой связи, описывает руководство Offline-first support в документации Flutter.

Правило, которое нельзя нарушать

Кэш ускоряет просмотр, но не участвует в расчёте денег. Перед оплатой серверная часть заново сверяет цену, остаток, промокод и доступные баллы с первоисточником. Если за время выбора товар закончился, покупатель увидит это до списания денег, а не в звонке оператора после заказа. Так устроено приложение сети кофеен One Price Coffee, запущенное за 2 месяца: корзина повторно проверяется по стоп-листу перед оплатой — подробности в разделе с кейсами.

Кэш каталога: ящик-картотека с копиями карточек товара между сервером и смартфоном, молния и секундомер

Интеграции: как приложение обменивается данными с 1С, CRM и банком

Интеграция — это автоматический обмен данными между приложением и другой системой компании. У интернет-магазина их обычно пять–семь, и именно на них приходится основная часть уникальной работы в проекте: каталог и корзина похожи у разных магазинов, а набор учётных систем, программ лояльности и служб доставки у каждого свой.

Система Какие данные Направление
1С или другая учётная система Товары, цены, остатки по складам; заказы и их статусы Товары — в приложение, заказы — обратно в учёт
CRM и система лояльности Профиль покупателя, баллы, уровни, сегменты для рассылок В обе стороны
Эквайринг и СБП Платёж, подтверждение, возврат, чек В обе стороны: запрос платежа и уведомление банка о результате
Службы доставки Стоимость, сроки, пункты выдачи, номер отслеживания В обе стороны
Маркетплейсы Остатки и цены из общего источника Из учётной системы на площадки, чтобы товар не продали дважды
Сервисы аналитики События: просмотры, корзина, покупки Из приложения в сервис

Четыре принципа надёжных интеграций

  1. Приложение не обращается к внешним системам напрямую. Все обмены идут через серверную часть. Ключи доступа к 1С, CRM и банку не хранятся на телефоне, а замена службы доставки или программы лояльности не требует новой версии приложения в сторах.
  2. Заказ сначала сохраняется у себя, потом уходит в учёт. Серверная часть принимает заказ, записывает его в свою базу и ставит в очередь на передачу. Если 1С в этот момент недоступна, заказ не теряется: система повторит отправку, когда учёт снова ответит.
  3. Банк сообщает о платеже сам. Результат оплаты приходит на сервер через вебхук — автоматическое уведомление, которое банк отправляет по заранее согласованному адресу. Даже если покупатель закрыл приложение сразу после оплаты, заказ получит статус «оплачен».
  4. У каждого обмена есть журнал. Когда заказ не дошёл до склада, команда видит, на каком шаге и с какой ошибкой он остановился, и не восстанавливает цепочку по жалобе покупателя.

Отдельная работа — сопоставление справочников. Артикулы, склады, города и статусы заказов в учётной системе и в приложении должны совпадать. Особенно это важно для сетей с региональными складами: покупатель должен видеть остатки и цены своего города. Как готовят учётную систему к обмену, разобрано в статье об автоматизации учёта товара в рознице с 1С; услуги — интеграция с ERP для интернет-магазина и интеграция приложения с CRM. Требования к оплате описаны в материале о безопасности платежей в мобильном приложении.

Интеграции приложения: смартфон с витриной, к которому подключены учётная система, оплата, доставка и лояльность, внизу очередь заказов

Мониторинг ошибок: как узнать о сбое раньше покупателей

Ошибки есть в любом приложении: редкая модель телефона, обрыв связи во время оплаты, неожиданный ответ учётной системы. Вопрос в том, кто узнает о проблеме первым — команда или покупатель, который напишет отзыв с одной звездой. Мониторинг — это набор инструментов, которые собирают ошибки автоматически и сообщают о них команде.

В приложении магазина следят за тремя уровнями:

Уровень Что собирают Чем пользуются
Приложение на телефоне Аварийные завершения, зависания, ошибки на экранах с моделью телефона, версией системы и шагами пользователя Сервисы сбора ошибок, например Sentry; отчёты App Store Connect и Google Play
Серверная часть Ошибки обработки запросов, время ответа, загрузка сервера и базы данных Журналы сервера, системы метрик, оповещения о превышении порогов
Бизнес-операции Неудачные оплаты, заказы, не дошедшие до учётной системы, сбои обмена с CRM и доставкой Журналы интеграций и оповещения в рабочий чат команды

Магазины приложений тоже следят за стабильностью. Google Play в разделе Android vitals публикует пороги: если доля пользователей, столкнувшихся со сбоем, превышает 1,09% за день, стор может реже показывать приложение в поиске и рекомендациях. Apple собирает отчёты о сбоях с устройств пользователей — порядок описан в документации Xcode.

Мониторинг полезен, только когда у каждой ошибки есть владелец. Поэтому оповещения делят по важности: сбой оплаты или остановка обмена с 1С поднимают дежурного сразу, а редкая ошибка отрисовки на старой модели телефона попадает в план ближайшего выпуска. Связанная тема — продуктовая аналитика, о ней материал аналитика мобильного приложения: метрики и инструменты.

Мониторинг ошибок приложения: окно с линией пульса, колокольчик оповещения, знак предупреждения и лупа

Типичные ошибки архитектуры и их цена

Большинство архитектурных проблем не видны при запуске. Они проявляются через полгода–год: в первую крупную распродажу, при смене учётной системы, при попытке добавить сайт на той же логике. Восемь решений, которые чаще всего приходится переделывать:

Ошибка К чему приводит Как устроить иначе
Приложение запрашивает 1С напрямую Учётная система не выдерживает пика, каталог перестаёт открываться Копия каталога на серверной части, обмен с учётом по расписанию и через очередь
Цены и скидки считаются на телефоне Разные цены на сайте и в приложении, для изменения правила нужна новая версия Расчёт корзины только на серверной части, одна логика для всех каналов
Кэш без сверки перед оплатой Продажа закончившегося товара, отмены и звонки покупателям Обязательная проверка цены и остатка у первоисточника перед списанием денег
Ключи доступа к банку или CRM внутри приложения Ключи можно извлечь из установочного файла, доступ к данным покупателей под угрозой Все обращения к внешним системам — через серверную часть
Нет поддержки старых версий приложения После изменения сервера у части покупателей перестаёт работать оформление заказа Версии API и минимальная поддерживаемая версия с экраном «обновите приложение»
Все функции связаны в один блок Правка в лояльности ломает корзину, каждое изменение требует полной проверки Модули с понятными точками входа и отдельными автотестами
Нет мониторинга ошибок О сбоях узнают из отзывов и падения выручки Сбор ошибок с первого выпуска и оповещения по важности
Главная страница зашита в код Каждая акция ждёт выпуска версии и проверки магазина приложений Баннеры, сториз и подборки управляются из админ-панели

У разделённой архитектуры есть и цена: на небольшом проекте с десятком экранов и одной интеграцией полноценные слои, очереди и версионирование API добавляют работы на старте. Для приложения-визитки без оплаты и учёта такая схема избыточна. Для интернет-магазина с каталогом, оплатой и программой лояльности она окупается на первой крупной доработке. Как тестируют связку приложения, сервера и интеграций целиком, описано в статье об E2E-тестировании приложения.

Метрики: как проверить, что архитектура работает

Архитектуру оценивают не по схемам, а по поведению приложения под реальной нагрузкой. Семь показателей, которые стоит видеть на одном экране:

Метрика Что показывает Где смотреть
Доля сессий без сбоев Насколько стабильно приложение на телефонах покупателей Сервис сбора ошибок, Android vitals, App Store Connect
Время запуска и открытия каталога Сколько покупатель ждёт первый экран с товарами Мониторинг производительности приложения
Время ответа серверной части Насколько быстро сервер отвечает на запросы каталога, корзины и заказа — в обычный день и в пик Системы метрик сервера
Доля попаданий в кэш Какая часть запросов каталога обслуживается готовой копией без обращения к базе Метрики кэша на серверной части
Доля успешных оплат Сколько начатых оплат завершилось списанием, а не ошибкой Журнал платежей и отчёты эквайринга
Задержка синхронизации Через сколько минут изменение цены или остатка в учёте появляется в приложении Журнал обменов с учётной системой
Время на исправление Сколько проходит от обнаружения ошибки до выпуска исправления Система задач и история выпусков

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

Метрики работы приложения: спидометр, секундомер, растущие столбики графика и щит с галочкой

Чек-лист: вопросы об архитектуре к подрядчику

Заказчику не нужно разбираться в коде, чтобы проверить архитектуру. Достаточно задать вопросы и попросить показать ответы на схеме:

  1. Где считаются цены, скидки и бонусы — на сервере или в приложении? Одинаково ли это для сайта и приложения?
  2. Обращается ли приложение к 1С напрямую? Если нет, как часто обновляется копия каталога и остатков?
  3. Что происходит с заказом, если учётная система недоступна в момент оформления?
  4. Сверяются ли цена и остаток перед оплатой?
  5. Какие части главной страницы и акций можно менять без выпуска новой версии?
  6. Как работает приложение при слабой связи и без интернета?
  7. Каким сервисом собираются ошибки приложения и сервера и кто получает оповещения?
  8. Как будут поддерживаться старые версии приложения после изменения сервера?
  9. Какую нагрузку выдерживает система и как это проверяли?
  10. Кому принадлежат исходный код, серверы и доступы к сервисам и как проект передаётся другой команде?

Если на половину вопросов ответ «уточним позже», архитектура, скорее всего, ещё не продумана. Проверить уже работающее приложение помогает аудит мобильного приложения; из чего он состоит, рассказывает статья о комплексном аудите мобильного приложения. Полный порядок действий заказчика — в чек-листе заказа приложения для интернет-магазина.

Как это устроено на модульной платформе

Описанные слои и модули можно спроектировать под каждый проект заново, а можно собрать из готовых блоков. Модульная Flutter-платформа FITTIN, внесённая в реестр российского ПО Минцифры (№ 2487103), работает по второму пути. Каталог, поиск и фильтры, корзина, оплата, личный кабинет, лояльность, push-уведомления, сториз, аналитика и мониторинг ошибок уже написаны и проверены на проектах розничных сетей. Под бренд их настраивают, оформляют и подключают к системам магазина.

Архитектурно платформа устроена так же, как в разделах выше:

  • Клиентская часть на Flutter. Из одного кода собираются приложения для App Store, Google Play и RuStore, а также сайт интернет-магазина. Как работает связка сайта и приложения на одной кодовой базе, описано в статье о приложении и сайте на Flutter.
  • Серверная часть на Python. Копия каталога, расчёт корзины, приём заказов и журналы обменов живут на сервере, а не в приложении. Подробнее о стеке — на странице разработки на Django.
  • Готовые интеграции. 1С, CRM и системы лояльности, эквайринг, службы доставки СДЭК, Boxberry и Почта России, маркетплейсы Wildberries, Ozon и Яндекс Маркет.
  • Кастомные доработки на исходном коде. Уникальные сценарии — конструктор товара, особая логистика, собственная механика лояльности — дописываются поверх модулей, не ломая базовый набор.

Модель оплаты состоит из трёх частей. Первая — единоразовая интеграция платформы под бренд, до 30 рабочих дней. Вторая — ежемесячные лицензионные платежи, в которые уже включены все затраты на техническую поддержку команды FITTIN: мониторинг ошибок, обновления модулей и безопасности, совместимость с новыми версиями iOS и Android. Для базового сопровождения своя команда разработки не требуется. Третья — новый функционал и доработки оплачиваются отдельно, по модели Time & Materials: оценка в часах и смета до старта задачи. Актуальные пакеты — на странице тарифов, ориентир под свой набор функций можно получить на калькуляторе стоимости.

Готовые модули подходят не всем. Если продукт строится вокруг нестандартной логики, которой нет в розничной торговле, выгоднее проектировать архитектуру с нуля — такие проекты описаны на странице мобильных приложений на заказ. Сравнение подходов с расходами на несколько лет вперёд — в материале о стоимости владения приложением, а устройство платформы по модулям — в разборе модульной платформы для e-commerce.

Кейсы: архитектурные решения в приложениях магазинов

Четыре проекта, где архитектурные решения из этой статьи видны в работе приложения. Данные — со страниц кейсов.

Синхронизация и кэш

One Price Coffee: заказ в 350+ точках со сверкой стоп-листа перед оплатой

Федеральная сеть кофеен с единой ценой, более 350 точек по России, приложение запущено за 2 месяца. Каталог синхронизируется с кассовой системой инкрементально — приложение забирает только изменившиеся позиции. Стоп-листы обновляются каждые 15 минут, а корзина повторно проверяется по стоп-листу перед оплатой. QR-код лояльности формируется на телефоне и показывается даже без интернета. Серверная часть написана на Python.

Интеграция с 1С

«Сатурн»: региональные склады в 1С и конверсия в покупку 12,4%

Сеть строительных гипермаркетов в 20+ городах с каталогом свыше 30 000 товаров. Приложение привязано к региональным складам и учётной системе 1С заказчика: покупатель из Санкт-Петербурга не оформит заказ на московский склад. За первый месяц — 7 594 установки, конверсия в покупку — 12,4%.

Внешние системы клиента

Finn Flare: перезапуск на Flutter с бюджетом в 2,5 раза меньше

Fashion-бренд перезапустил приложение на Flutter: бюджет оказался в 2,5 раза меньше, скорость разработки — в 1,5 раза выше. Бонусная система подключена через вебхук клиента, сегментированные push-уведомления отправляются через Mindbox. Приложение работает в России и Казахстане с ценами в рублях и тенге.

Обмен в обе стороны

Fitomarket: каталог 4 700+ товаров из учётной системы и рейтинг 4,6

Маркетплейс товаров для здоровья от «Эвалар». Приложение интегрировано с учётной системой в обе стороны: каталог, цены и остатки приходят из учёта, оформленные заказы возвращаются обратно. В каталоге более 4 700 товаров, рейтинг — 4,6 по отзывам более чем 305 пользователей в App Store и Google Play.

Как приложения магазинов устроены с точки зрения функций, показано на страницах мобильных приложений для интернет-магазинов и Flutter-приложений для e-commerce. Остальные проекты — в разделе кейсов.

Итог: архитектура приложения на одной странице

Вопрос Короткий ответ
Из чего состоит приложение Клиентская часть на телефоне, серверная часть и интеграции с внешними системами
Где считаются цены и скидки На серверной части — одна логика для приложения и сайта
Откуда берётся каталог Из копии на серверной части, которую обновляют из учётной системы по расписанию
Что кэшируется Каталог, фото, баннеры; корзина и оплата — нет, перед оплатой обязательна сверка
Как устроены интеграции Только через серверную часть, с очередью, повторной отправкой и журналом обменов
Что мониторить Сбои приложения, ошибки и время ответа сервера, неудачные оплаты и обмены с 1С
Главные метрики Доля сессий без сбоев, время открытия каталога, доля успешных оплат, задержка синхронизации

Материалы по теме:

Что делать дальше:

Часто задаваемые вопросы

Чем архитектура приложения интернет-магазина отличается от архитектуры сайта?

Серверная часть, база данных и интеграции у сайта и приложения могут быть общими — и так удобнее всего. Отличается клиентская часть: приложение хранит данные на устройстве, работает при слабой связи, получает push-уведомления и обновляется через App Store и Google Play. Поэтому у части покупателей долго стоят старые версии, и сервер должен их поддерживать. Сайт обновляется у всех сразу.

Можно ли подключить приложение напрямую к 1С без своей серверной части?

Технически можно, но для интернет-магазина так делать не стоит. Учётная система не рассчитана на тысячи одновременных запросов покупателей и в распродажу перестанет отвечать. Ключи доступа к ней придётся хранить в приложении, а любое изменение обмена потребует новой версии в сторах. Надёжнее держать копию каталога на серверной части и обмениваться с 1С по расписанию и через очередь заказов.

Как часто в приложении обновляются цены и остатки?

Зависит от ассортимента и скорости продаж, частоту согласуют на старте проекта. Описания и характеристики обновляют реже, цены и остатки — чаще, передавая только изменившиеся позиции. Например, в приложении сети кофеен из раздела с кейсами стоп-листы обновляются каждые 15 минут. Независимо от расписания перед оплатой серверная часть заново сверяет цену и остаток с учётной системой.

Будет ли приложение работать без интернета?

Частично. Приложение сохраняет последние загруженные экраны каталога, фото, избранное и данные профиля, поэтому их можно просматривать при слабой связи или без неё. Оформить заказ и оплатить без интернета нельзя: цена, остаток и платёж проверяются на сервере в момент операции. Некоторые функции специально делают доступными офлайн — например, QR-код карты лояльности, который формируется на телефоне.

Как узнать об ошибках в приложении раньше, чем появятся плохие отзывы?

Подключить сбор ошибок с первого выпуска. Сервис вроде Sentry присылает сведения о каждом сбое с моделью телефона и шагами пользователя, журналы сервера показывают ошибки запросов и время ответа, а журналы интеграций — неудачные оплаты и заказы, не дошедшие до 1С. Критичные события отправляют оповещением дежурному сразу. Дополнительно стоит следить за разделом стабильности в Google Play и App Store Connect.

Можно ли поменять учётную систему или CRM, не переделывая приложение?

Да, если приложение обращается к внешним системам только через серверную часть. Тогда при смене CRM или программы лояльности переписывают модуль интеграции на сервере, а приложение на телефонах покупателей продолжает работать с тем же API и не требует новой версии. Если приложение связано с внешней системой напрямую, смена системы означает доработку приложения, выпуск версии и ожидание, пока покупатели обновятся.

Сколько стоит разработать архитектуру приложения интернет-магазина?

Архитектуру не покупают отдельно — она часть проекта, и объём работ определяют число интеграций, нестандартные сценарии и требования к нагрузке. При заказной разработке её проектируют и оценивают по техническому заданию. На модульной платформе слои, кэш, мониторинг и базовые интеграции уже готовы: оплачиваются интеграция под бренд, ежемесячная лицензия с техподдержкой и доработки по Time & Materials. Актуальные пакеты — на странице тарифов.

Материал носит информационно-аналитический характер, отражает оценку команды FITTIN на дату публикации. Пороги стабильности магазинов приложений приведены по документации Google на дату публикации и могут меняться. Названия сторонних сервисов и систем упоминаются для описания архитектурных решений и принадлежат их правообладателям.

ДАВАЙТЕ ОБСУДИМ
ВАШ ПРОЕКТ

Мобильное приложение