BFF - отдельный бэкенд под конкретный клиент (веб, мобильное приложение), агрегирует вызовы к микросервисам и адаптирует ответы. В Go BFF - HTTP-сервер: принимает запрос от клиента, вызывает несколько сервисов (параллельно где возможно), собирает ответ в нужном формате. Уменьшает число запросов с клиента и скрывает детали внутренних API.
func (b *BFF) GetDashboard(ctx context.Context, userID string) (*Dashboard, error) {
var orders *Orders
var profile *Profile
g, ctx := errgroup.WithContext(ctx)
g.Go(func() error { orders, _ = b.orders.GetByUser(ctx, userID); return nil })
g.Go(func() error { profile, _ = b.profile.Get(ctx, userID); return nil })
if err := g.Wait(); err != nil { return nil, err }
return &Dashboard{Orders: orders, Profile: profile}, nil
}