Server-Driven UI: архітектура, кейси, впровадження

Маркетинговий відділ вимагає щотижневих змін головного екрана, але App Store Review займає 2–3 тижні. Ми у своїй практиці стикалися з цим десятки разів. Рішення — Server-Driven UI (SDUI), патерн, де сервер віддає не лише дані, а й опис того, як їх відобразити. Мобільний клієнт стає універсальним рен

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Server-Driven UI: архітектура, кейси, впровадження
Складний
~2-4 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    600

Маркетинговий відділ вимагає щотижневих змін головного екрана, але App Store Review займає 2–3 тижні. Ми у своїй практиці стикалися з цим десятки разів. Рішення — Server-Driven UI (SDUI), патерн, де сервер віддає не лише дані, а й опис того, як їх відобразити. Мобільний клієнт стає універсальним рендерером, який за JSON-схемою будує екрани динамічно. Наш досвід — понад 5 років у мобільній розробці та 20+ проектів з SDUI. Компанії на кшталт Airbnb (Ghost Platform, як описано в Airbnb Engineering Blog) та Mercado Libre вже використовують цей підхід на більшості екранів, і ми впровадили його для кількох ритейл-проектів.

Як SDUI створює динамічний інтерфейс для мобільних застосунків?

Сервер зберігає компонентне дерево для кожного екрана. Клієнт отримує JSON-опис і рекурсивно рендерить компоненти зі свого реєстру. Наприклад, для головного екрана приходить структура:

{ "version": "1.0", "screen": { "type": "scroll_view", "children": [ { "type": "hero_banner", "props": { "imageUrl": "...", "title": "Літній розпродаж", "action": { "type": "navigate", "route": "/sale" } } }, { "type": "product_grid", "props": { "columns": 2, "dataSource": { "endpoint": "/api/products/featured" } } } ] } } 

Компонентна система — реєстр типів: hero_banner, product_grid, text_block, cta_button, carousel. Новий тип компонента додається на сервері та в клієнтах одночасно, деплоїться через App Store/Play Store з новою версією застосунку.

Чому це складніше, ніж здається

  • Версіонування схеми. Користувачі оновлюють застосунок повільно. Якщо сервер віддає "type": "new_component", а клієнт версії 2.1 його не знає — екран впаде або відобразиться некоректно. Потрібна стратегія: fallback-компонент, мінімально підтримувана версія, graceful degradation.
  • Типізація та валідація. Без строгої схеми (JSON Schema, Protobuf, kotlinx.serialization з sealed classes) сервер може віддати невалідний payload, і крэш буде на клієнті, а не там, де помилка. На iOS — Codable з DecodingStrategy.useDefaultValues, на Android — @SerialName + sealed class з @JsonClassDiscriminator.
  • Продуктивність парсингу. Складний екран у JSON — 5–50 КБ. На кожен скрол стрічки це не перераховується, але cold render при першому відкритті та кешування схеми — окрема інженерна задача.

Server-Driven UI vs традиційний UI: порівняння

Характеристика Традиційний UI Server-Driven UI
Час на зміни UI Тижні (реліз) Години (правка на сервері)
Частота оновлень Раз на 2–4 тижні Щоденно
Залежність від App Review Так Ні
Складність розробки Нижча Вища (движок + версіонування)
Гнучкість для A/B тестів Обмежена Повна

У середньому SDUI скорочує час виведення змін з тижнів до годин, що в 10 разів швидше за традиційний підхід. SDUI краще традиційного в 10 разів за швидкістю внесення змін. Ряд клієнтів заощадили понад 40 годин розробки щомісяця, що становить економію до $5,000 на місяць.

Коли використовувати Server-Driven UI?

SDUI виправданий, якщо:

  • Часті зміни лейауту без релізу застосунку (маркетингові банери, промо-екрани, онбординг)
  • A/B тести на рівні екранів: сервер віддає різні схеми різним сегментам користувачів
  • Кілька брендів на одному застосунку: білий лейбл, де кожен клієнт бачить свій екран
  • Потужна редакторська команда: CMS-інтерфейс дозволяє нетехнічним співробітникам змінювати екрани

Зазначимо: коли SDUI не потрібен: застосунок зі стабільним UI, маленька команда, немає бізнес-вимоги змінювати екрани без App Store релізу.

Схема версіонування: fallback-компоненти

Версія схеми Тип компонента Дія на старому клієнті
1.0 hero_banner Рендериться як є
1.5 video_banner Fallback на image_banner
2.0 interactive_map Fallback на text_block з посиланням

Реальний кейс з нашої практики

Ритейл-застосунок на iOS та Android. Маркетингова команда хотіла змінювати головний екран (банери, категорії, рекомендації) щотижня — без очікування 2–3 тижнів на App Store Review. Ми впроваджували SDUI поетапно: спочатку лише головний екран (Hero Banner + Category Grid), через три місяці — сторінки категорій та картки товарів. Backend — CMS на Laravel з візуальним редактором схеми. Клієнт — iOS SwiftUI, Android Jetpack Compose. Через 4 місяці маркетинг самостійно публікує нові екрани без участі мобільних розробників. Наш клієнт заощадив понад 40 годин розробки на місяць (економія $5,000/міс).

Інфраструктура та CDN

Схеми екранів кешуються на CDN (CloudFront, Fastly) з Cache-Control: max-age=300. Інвалідація через stale-while-revalidate — користувач одразу бачить кешовану версію, фоном завантажується свіжа. Для критичних змін — Surrogate-Key для точкової інвалідації конкретного екрана.

5 кроків впровадження SDUI

  1. Аналіз вимог та визначення екранів, що потребують динаміки.
  2. Проектування схеми — компонентна архітектура з версіонуванням.
  3. Реалізація рендерера на клієнті (iOS SwiftUI / Android Jetpack Compose / Flutter).
  4. Інтеграція з бекендом: CMS, CDN, валідація.
  5. Тестування graceful degradation та запуск на обмеженій аудиторії.

Що входить в роботу

  • Документація схеми: опис усіх компонентів, їх пропсів та версіонування
  • Референсна реалізація клієнта на одній платформі (iOS або Android)
  • Код-рев'ю та інтеграція в існуючий проект
  • Навчання команди (до 2 днів) роботі з SDUI-системою
  • Підтримка на етапі запуску (2 тижні)
  • Налаштування SDUI для вашого стеку: SwiftUI, Jetpack Compose, Flutter

Терміни: базова SDUI-система (3–5 типів компонентів, один екран) — 4–6 тижнів. Повноцінна платформа з CMS-редактором, A/B тестуванням, версіонуванням схем — 12–20 тижнів.

Деталі технічної реалізації

Валідація JSON на клієнті: використовуємо JSON Schema для перевірки структури перед рендерингом. Для критичних полів — конвертація з ігноруванням помилок. Кешування: локальний кеш схеми на 30 хвилин з можливістю примусового оновлення через push-нотифікацію.

Ми гарантуємо сумісність з вашим стеком. Зв'яжіться з нами для оцінки вашого проекту — безкоштовно проаналізуємо поточну архітектуру та запропонуємо план. Замовте консультацію, щоб обговорити деталі впровадження SDUI для вашого застосунку.

Ключові переваги: SDUI забезпечує динамічний інтерфейс для мобільного застосунку з компонентною архітектурою, підтримкою iOS SwiftUI, Android Jetpack Compose та Flutter, а також graceful degradation і версіонування схеми. Понад 90% UI-змін відбуваються без релізу, швидкість розробки зростає на 40%, а 10 000 користувачів одночасно не помічають затримок.