TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #194 3.04K
BFF

Представьте, что нам нужно показать карточку товара в интернет-магазине. За описанием товара надо сходить в один микросервис, за актуальной ценой и скидками — в другой, а за наличием — в третий. Фронтенд может сам дернуть несколько микросервисов с бэка, но есть и другой подход.

Backend-for-frontend — это слой между фронтендом и микросервисами, который служит специализированным бэкендом для конкретного типа клиента (веб, мобилки и др.)

По сути BFF — это отдельный компонент на бэке (при микросервисной архитектуре в виде микросервиса), который:

1️⃣получает запрос типа GET /product/123

2️⃣сам делает запросы в нужные микросервисы
➡️ GET /descriptions/123
➡️ GET /prices/123
➡️ GET /inventory/123

3️⃣Собирает ответы, формирует из них общий ответ для клиента и отправляет его


Плюсы по сравнению с отдельными запросами с фронта:

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

BFF могут писать как фронтенд-разработчики на Node.js, так и бэкендеры на своем языке. Например, я работала с BFF, написанном на Java.

При такой схеме
🔜 запрос сначала поступает на API Gateway (пост про него),
🔜 оттуда маршрутизируется в BFF,
➡️ а из BFF уже идут запросы к микросервисам с логикой.

Для API у BFF обычно используют REST, а от BFF к другим микросервисам может быть как REST, так и gRPC (пост про gRPC vs REST).

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

Важно! Такой подход нужен не всегда. Если не требуется кастомизации под разных клиентов (веб, мобилки и др.) и не требуется агрегация ответов из нескольких микросервисов, то можно обойтись без BFF.

На сисдиз-собесе, как мне кажется, BFF обычно не рисуют, но знать о нем определенно стоит.

Однажды на архитектурной секции мне задали как раз такой вопрос про карточку товара. А я тогда еще не знала про BFF. Но отвечать-то надо.

Вспомнила, что когда-то давно была фулстеком, напрягла память посильнее и выдала код на JavaScript с Promise.all() и параллельными fetch-запросами. Спустя пару лет чистого бэка сама от себя не ожидала. Вот что собесы животворящие делают 😂

Архитектор, задававший вопрос, конечно, удивился: не каждый день на арх собесе пишут код на JS 😂

Рассказал мне тогда про BFF. В тот же вечер я почитала про него подробнее. Собес в итоге прошла, и стала работать на проекте с BFF.

А вы встречались в работе с BFF?

#сисдиз
  • 👍 54
  • ❤ 15
  • ❤‍🔥 12
  • 🔥 4
More from @jane_yanchenko
  1. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  2. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  3. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  4. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  5. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  6. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →