Архитектура BFF — бэкенд для фронтенда

В современной программной разработке переход к микросервисам, облачным архитектурам и все новым клиентским устройствам — мобильным, веб-приложениям, устройствам интернета вещей и т. д. — сопровождается появлением новых архитектурных парадигм, одной из которых является бэкенд для фронтенда. Приложения становятся более распределенными, и для быстрого, сопровождаемого, безопасного пользовательского взаимодействия важно адаптировать бэкенд-сервисы под конкретные клиентские потребности.
Что такое «бэкенд для фронтенда»?
Это архитектурный шаблон, которым для интерфейса каждого фронтенда предоставляется специальный уровень бэкенда. У каждого фронтенда — мобильного, веб-приложения, смарт-устройства и т. д. — разные потребности производительности, данных и взаимодействия. BFF не полагается на единый монолитный или обобщенный API, бэкенд здесь адаптируется к конкретным потребностям фронтенда.
Для каждого клиента или группы клиентов, например мобильных или веб, создается отдельный бэкенд, которым:
- объединяются или оркестрируются вызовы к различным сервисам;
- подготавливаются данные в удобном для клиента формате;
- обрабатывается конкретная, связанная к фронтендом логика.
Этим обеспечивается разделение обязанностей, упрощается оптимизация каждого бэкенда для конкретного клиентского сценария.
Принцип работы BFF
1.Клиентские запросы: клиентом — мобильным, веб-приложением и т. д. — отправляется запрос в соответствующий BFF.
2. Уровень BFF: здесь объединяются данные из микросервисов, выполняются любые преобразования или оптимизации и выдается специализированный ответ.
3. Микросервисы: BFF взаимодействует с базовыми сервисами, например пользователей, заказов и т. д.
Традиционные архитектуры против BFF

В традиционных архитектурах запросы от разных клиентов — мобильных, веб-приложений, устройств интернета вещей — обычно обрабатываются одним API-шлюзом. API-шлюз хорош для маршрутизации запросов, добавления аутентификации и ограничения скорости, но ему не хватает гибкости для конкретных потребностей фронтенда:
- Адаптированных моделей данных различных клиентских приложений.
- Специализированных оптимизаций производительности для мобильных сетей помедленнее.
- Управления сложной оркестрацией сервисов для конкретных фронтендов.
Монолитный подход к API часто чреват избыточной выборкой данных, когда их слишком много, или недостаточной — данных слишком мало. В последнем случае для сбора необходимой информации клиенты вынуждены совершать циклы обмена данными. В BFF эта проблема решается разделением бэкендов: каждым клиентом получается именно то, что ему нужно.
Почему BFF — суперзвезда современной архитектуры
- Адаптированное пользовательское взаимодействие: каждым фронтендом — будь то мобильное приложение, настольное или переносное устройство — получаются ровно те данные, которые ему нужны. Ничего лишнего, все равно что иметь костюм идеального размера на любой случай.
- Меньше сложность: в BFF все упрощается настройкой каждого бэкенда, обеспечением плавного взаимодействия в платформах.
- Выше производительность: BFF — это ускорители приложения. Сокращением ненужных API-вызовов ими ускоряются ответы, что положительно сказывается на удовлетворенности пользователей.
- Быстрее разработка: занимаясь разными BFF для каждого фронтенда, команды движутся быстрее, не мешая друг другу. Это как если бы на кухне было несколько поваров, каждый из которых готовил собственное блюдо.
- Выше безопасность: в BFF контролируется все взаимодействие с бэкендом, применяются строгие меры безопасности: проверка токенов и ввода, ограничение скорости. Поэтому система безопаснее.
Когда использовать BFF?
Мультиплатформенные приложения — веб, мобильные, смарт-устройства — здесь благодаря BFF в каждой платформе обеспечивается адаптированное пользовательское взаимодействие.
Оркестрация микросервисов: в микросервисной архитектуре данные извлекаются клиентами из нескольких сервисов, например пользователей, заказов, инвентаризации. BFF — это оркестратор, необходимые данные собираются им из различных сервисов и представляются клиенту как единый ответ.
Оптимизация устаревших API: когда переходят на микросервисы или используют устаревшие системы, в BFF маскируются сложности базовой архитектуры: фронтенду предоставляется современный интерфейс, взаимодействие со старыми системами при этом сохраняется.
Сложности и нюансы: здесь не все так просто
У BFF много преимуществ, но имеются и сложности:
1.Повышаются накладные расходы на сопровождение: необходимость сопровождения стольких бэкендов — по одному на каждый фронтенд — чревата увеличением сложности. А это дополнительные меры по отслеживанию, масштабированию и безопасности.
2. Проблемы с согласованностью: необходима тщательная проработка, иначе наличие отдельных бэкендов чревато несогласованностью данных, возвращаемых разными клиентами.
3. Узкие места производительности: уровень BFF становится ограничителем производительности, если не оптимизирован для обработки многочисленных запросов или если на нем выполняются интенсивные вычисления.
Рекомендации по реализации
При реализации архитектуры BFF рекомендуется:
1.Ограничить бизнес-логику: BFF фокусируется на оркестрации и форматировании данных для фронтенда, а не на реализации сложной бизнес-логики.
2. Использовать кеширование: для повышения производительности, особенно мобильных клиентов, на уровне BFF кешируются типичные ответы.
3. Обработка ошибок: чтобы предотвратить проблемы на клиенте, в BFF централизуются обработка ошибок и логирование.
4. Безопасность: для защиты бэкенд-сервисов обеспечивается безопасность BFF: на уровне BFF применяются аутентификация, авторизация, ограничение скорости.
Реальные истории успеха BFF
- Netflix: в основе беспроблемной работы Netflix на разных устройствах — архитектура BFF. Мобильным приложением получаются только упрощенные данные, настольным извлекается детальная информация — для расширенной функциональности.
- Spotify: благодаря BFF каждым устройством — будь то телефон, планшет или смарт-колонка — получаются оптимизированные данные, обеспечивается быстрое и плавное воспроизведение музыки на разных платформах.
BFF — секрет безупречного пользовательского взаимодействия
Бэкенд для фронтенда — это революционная архитектура. С ее помощью разработчики предоставляют каждому пользовательскому интерфейсу ровно то, что нужно — ни больше ни меньше. Хотя управление несколькими BFF чревато добавлением сложности, это с лихвой окупается увеличением производительности и гибкости.
Масштабируете вы веб-, мобильное приложение или устройство интернета вещей, BFF может быть тем секретным ингредиентом, которого вам не хватало. Поэтому, когда будете разрабатывать архитектуру приложения, подумайте о BFF — вашем личном шеф-поваре, который со вкусом приготовит именно то, что нужно каждому приложению.
Читайте также:
- Шаблоны проектирования бэкенда
- Микрофронтенды: 9 шаблонов для каждого разработчика
- 10 полезных библиотек для фронтенд-разработки
Читайте нас в Telegram, VK и Дзен
Перевод статьи Rohit S: Backend for Frontend (BFF) Architecture