[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-mikroservisy-chto-takoe-pattern-bff-backend-for-frontend":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},909,"chto-takoe-pattern-bff-backend-for-frontend",23,"mikroservisy","Микросервисы","🔗","Что такое паттерн BFF (Backend for Frontend)?","BFF (Backend for Frontend) — это паттерн, при котором для каждого типа клиента (мобильное приложение, веб-приложение, партнёрское API) создаётся отдельный backend-сервис, оптимизированный под потребности этого клиента.\n\n```\n┌──────────┐   ┌──────────┐   ┌──────────────┐\n│ Мобильное│   │ Веб-     │   │ Партнёрское  │\n│ прилож.  │   │ прилож.  │   │ API          │\n└────┬─────┘   └────┬─────┘   └─────┬────────┘\n     │              │               │\n┌────▼─────┐   ┌────▼─────┐   ┌────▼────────┐\n│ Mobile   │   │ Web      │   │ Partner     │\n│ BFF      │   │ BFF      │   │ BFF         │\n└────┬─────┘   └────┬─────┘   └─────┬───────┘\n     └──────────────┼───────────────┘\n                    │\n        ┌───────────┼───────────┐\n        ▼           ▼           ▼\n   Payment     Customer    Notification\n   Service     Service     Service\n```\n\n### Зачем нужен BFF\n\n1. Разные потребности клиентов — мобильному приложению нужен минимум данных (экономия трафика), веб-приложению — полный набор полей.\n2. Агрегация данных — BFF объединяет данные из нескольких микросервисов в один ответ.\n3. Разная частота изменений — мобильное приложение обновляется реже, его BFF может поддерживать старые форматы дольше.\n\n\u003Cdetails>\u003Csummary>Пример: Mobile BFF vs Web BFF\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Mobile BFF — минимум данных, оптимизация для мобильных\n@RestController\n@RequestMapping(\"\u002Fmobile\u002Fapi\")\npublic class MobileAccountController {\n\n    @GetMapping(\"\u002Fdashboard\")\n    public MobileDashboardResponse getDashboard(@AuthenticationPrincipal User user) {\n        Account account = accountService.getMainAccount(user.getId());\n        List\u003CTransaction> recent = transactionService.getRecent(user.getId(), 5);\n\n        return MobileDashboardResponse.builder()\n            .balance(account.getBalance())\n            .currency(account.getCurrency())\n            .recentTransactions(recent.stream()\n                .map(t -> new MobileTransactionDto(t.getAmount(), t.getDescription()))\n                .toList())\n            .build(); \u002F\u002F Компактный ответ\n    }\n}\n\n\u002F\u002F Web BFF — больше данных, сложные представления\n@RestController\n@RequestMapping(\"\u002Fweb\u002Fapi\")\npublic class WebAccountController {\n\n    @GetMapping(\"\u002Fdashboard\")\n    public WebDashboardResponse getDashboard(@AuthenticationPrincipal User user) {\n        List\u003CAccount> accounts = accountService.getAllAccounts(user.getId());\n        List\u003CTransaction> transactions = transactionService.getRecent(user.getId(), 50);\n        AnalyticsData analytics = analyticsService.getMonthlyAnalytics(user.getId());\n        List\u003CNotification> notifications = notificationService.getUnread(user.getId());\n\n        return WebDashboardResponse.builder()\n            .accounts(accounts)\n            .transactions(transactions)\n            .analytics(analytics)\n            .notifications(notifications)\n            .build(); \u002F\u002F Полный набор данных\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Когда использовать BFF\n\n- Есть несколько типов клиентов с разными потребностями.\n- Клиентам нужны агрегированные данные из нескольких сервисов.\n- Разные команды отвечают за разные клиентские приложения.\n\n### Когда НЕ нужен BFF\n\n- Один тип клиента — достаточно API Gateway.\n- Все клиенты потребляют одинаковые данные.\n\n> **На собеседовании:** объясните отличие BFF от API Gateway. Gateway — общий для всех клиентов, BFF — специализированный для каждого типа клиента. Частая ошибка — путать эти два паттерна.","","middle",[15],"microservices",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое паттерн BFF (Backend for Frontend)? — Gymterview","BFF (Backend for Frontend) — это паттерн, при котором для каждого типа клиента (мобильное приложение, веб-приложение, партнёрское API) создаётся отдельный backe","BFF (Backend for Frontend) — это паттерн, при котором для каждого типа клиента (мобильное приложение, веб-приложение, па",[15,13],"BFF (Backend for Frontend) — это паттерн, при котором для каждого типа клиента (мобильное приложение, веб-приложение, партнёрское API) создаётся отдельный backend-сервис, оптимизированный под потребности этого клиента.",true]