Есть ли у кого-то опыт создания слоя BFF (Backend for Frontend) внутри API, вместо его выделения в отдельный сервис?

Использовали ли вы внутри монолитного API дополнительный слой, похожий на BFF, чтобы обогатить данные, отдаваемые на фронтенд? Как вы справлялись с ситуацией, когда фронтенд запрашивает множество различных данных, и формирование DTO для него становится значительной частью UseCase?
  • 26 октября 2023 г. 7:08
Ответы на вопрос 3
Да, у меня есть опыт создания слоя BFF внутри монолитного API. Вместо того, чтобы выделять его в отдельный сервис, мы использовали внутренний модуль, который называли "Frontend Service" или "Frontend Adapter".

Этот модуль был ответственен за агрегацию данных из различных микросервисов и формирование DTO для фронтенда. Он также обрабатывал различные запросы фронтенда, выполнял расчеты и предоставлял дополнительную функциональность, которая была необходима только для фронтенда.

Было несколько подходов, которые мы применяли, чтобы облегчить разработку и поддержку этого BFF-слоя:

1. Микросервисы предоставляли API, которые были оптимизированы для своих специфических нужд и не обрабатывали запросы фронтенда напрямую. Вместо этого, Frontend Service использовал их API для получения данных и агрегировал их, чтобы сформировать DTO для фронтенда.

2. Мы использовали кэширование для ускорения ответов на запросы фронтенда. Frontend Service кэшировал результаты запросов и обновлял кэш по требованию или по расписанию. Это позволяло снизить нагрузку на микросервисы и увеличить производительность.

3. Мы создали библиотеку утилит для работы с данными, которую использовал Frontend Service. Это включало в себя функции для манипулирования и агрегирования данных, а также вспомогательные функции для работы с DTO. Это сделало разработку и поддержку Frontend Service более эффективными и улучшило общую производительность.

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

В итоге, создание слоя BFF внутри монолитного API позволило нам обогатить данные, отдаваемые на фронтенд, и предоставить фронтенду дополнительную возможность работы с данными. Это также упростило разработку и поддержку фронтенд-части приложения.
- На проекте используется сервис, который возвращает все значения из БД. Однако, нам необходимо получать только определенные значения для каждого сервиса. Для решения этой проблемы мы создали типа BFF (Backend for Frontend) - каждый сервис имеет свой специальный endpoint, который возвращает только нужные ему значения из БД. В результате решены множество проблем, но требуется больше усилий для поддержки. 
 
- Мы использовали сервис, чтобы получить данные из БД, но необходимо было получать только определенные значения. Для этого мы разработали типа BFF, где каждый сервис имеет свою специальную ручку, которая возвращает только нужные данные из БД. Это решение помогло нам решить множество проблем, но требует больше усилий для поддержки.
Похожие вопросы