Server-driven UI значит: сервер присылает описание экрана или дельту, клиентское приложение рисует по правилам. Поменяли логику на сервере - клиенты получают новое поведение без ожидания ревью в сторе. Экономия нервов на маркетинговых кампаниях и срочных фиксах - ощутимая.
Минусы: нужна стабильная сеть, продуманный офлайн, тестирование контрактов между клиентом и сервером. Ниже - кому это заходит и как не утонуть.
Когда окупается
Частые изменения UI, много экранов, которые меняются по флагам, A/B без пересборки приложения. Если приложение меняется раз в квартал - возможно, вы просто усложнили архитектуру.
Безопасность и версии
Клиент должен понимать, какую схему он поддерживает. Сервер - не отдавать устаревшее вечно. Версионирование контрактов, чтобы старые клиенты не ломались молча.
Связка с аналитикой
События с сервера проще стандартизировать, но следите за приватностью: не тащите лишнее в логи.
Офлайн и плохая сеть
Если экран целиком с сервера, продумайте кэш последнего успешного состояния и честное «нет сети» с кнопкой повторить. Люди терпят офлайн, не терпят вечное кручение.
Команда мобильной разработки
Нужны договорённости с бэкендом о схемах, фичефлагах и совместимости. Иначе мобильные разработчики начнут ненавидеть «ещё одно поле сверху» каждый вторник.
Релизный ритм
Server-driven даёт скорость, но не отменяет тесты. Автоматические проверки схемы ответа - must have, иначе клиент увидит пустой экран из-за одной опечатки в JSON.
Схемы и валидация на сервере
JSON Schema или аналог для экранов: типы полей, обязательность, максимальная вложенность. Клиент не должен быть единственным валидатором — иначе любой патч приложения открывает дырку.
Версионируйте не только API, но и «рецепты» экранов: id макета, набор компонентов, флаги эксперимента. Так аналитика увидит, какая версия UI дала эффект.
Наблюдаемость клиента
События «не смогли распарсить экран», «таймаут рендера», «несовпадение версии контракта» — отдельные счётчики. Это дешевле звонков в поддержку с пустым экраном.
Контракт экрана: версии и совместимость
Клиенты в сторе обновляются не синхронно. Поддерживайте минимум две версии контракта экрана, пока старые сборки не отвалятся по статистике.
Тестирование UI с сервера
Снапшоты JSON-экранов, контрактные тесты, визуальные регрессии на ключевых состояниях. Иначе «лёгкая правка на сервере» ломает прод у миллиона пользователей.
Производительность и кэш
Кэшируйте описания экранов, минимизируйте вложенность, не тяните тяжёлые медиа без необходимости. SDUI не отменяет бюджета трафика.
Оффлайн и деградация
Что показываем без сети, как синхронизируем очередь действий. Пользователь в лифте не должен видеть пустой экран оплаты.
Безопасность
Подписывайте ответы сервера, ограничивайте действия ролями, не доверяйте клиенту скрытые поля. Любой JSON — потенциальный вектор.
Команда
Сильный бэкенд и мобильный архитектор, которые говорят на одном языке схем. Без этого SDUI превращается в бесконечные «почему у меня не так».
Оценить подход для вашего приложения - контакты GERS.