Паттерны API Gateway и BFF



В микросервисной архитектуре часто возникает вопрос, как организовать взаимодействие между клиентами (например, веб-приложениями или мобильными приложениями) и сервисами, которые предоставляют API. Для этого существуют два популярных паттерна: API Gateway и BFF (Backend For Frontend).



API Gateway – это компонент, который выступает в качестве единой точки входа в систему для всех клиентов. принимает запросы от клиентов, перенаправляет их к соответствующим микросервисам и возвращает ответы обратно к клиентам.



Преимущества API Gateway



1️⃣ Упрощает использование API, так как клиентам не нужно знать о расположении и протоколах каждой системы и сервиса. При этом системы-источники данных избавляются от необходимости адаптироваться к каждому потребителю по отдельности



2️⃣ Обеспечивает единообразие и стандартизацию API для всех клиентов



3️⃣ Обеспечивает безопасность, так как API Gateway может осуществлять аутентификацию и авторизацию клиентов перед дальнейшими вызовами. Также API Gateway может вводить ограничения частоты запросов



4️⃣ Мониторинг и сбор показателей, что упрощает решение проблем и инцидентов



5️⃣ Сокращение количества сетевых вызовов, так как API Gateway может агрегировать и трансформировать данные из разных микросервисов в один ответ



6️⃣ Повышение производительности системы в целом и снижение нагрузки на системы-источники данных, так как API Gateway может кешировать данные, фильтровать запросы и применять политики доступа.

Однако зачастую кэширование на уровне API Gateway создаёт сложности согласованности данных (ведь у конечной системы тоже свой кэш), размазывает часть логики из разных систем на один компонент.



⛔️ Недостатки API Gateway



Может стать узким местом и единой точкой отказа, если он не масштабируется и не защищается должным образом

Добавляет некоторую задержку между запросом и ответом

Может усложнить тестирование и отладку системы, так как он скрывает детали взаимодействия между сервисами



BFF – это вариация паттерна API Gateway, при которой для каждого типа клиента создается свой собственный API Gateway. Например, для сайта свой Web BFF, для приложения клиента App BFF, для ЛК сотрудника Emp BFF.



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



Преимущества BFF по сравнению с единым API Gateway для всех клиентов



1️⃣ Позволяет создавать более гибкие и настраиваемые API для каждого клиента, учитывая его различия в протоколах, форматах данных, функциональности и интерфейсе



2️⃣ Уменьшает объем передаваемых данных, так как BFF может отфильтровать и сократить ненужную информацию для клиента



3️⃣ Повышает независимость и ответственность команд, так как каждая команда может владеть и управлять своим BFF



⛔️ Недостатки BFF



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



Промышленные решения для API Gateway и BFF

Kong

Tyk

KrakenD

Istio

Yandex Cloud



📎 Статьи

1. Что такое API-шлюзы и Gateway API

2. Pattern: API Gateway / Backends for Frontends — Крис Ричардсон

3. Pattern: Backends For Frontends — Сэм Ньюмэн

4. Опыт создания API Gateway

5. Использование паттерна BFF для создания общих типов в бэкенде и фронтенде

6. Бэкенд для фронтенда, или Как в Яндекс.Маркете создают API без костылей

7. GraphQL-gRPC API Gateway на Java



Видео

1. BFF и API Gateway для аналитика — интервью с Денисом Мигулиным на канале NextWay

2. Что такое BACKEND-FOR-FRONTEND и API GATEWAY за 7 минут

3. API Gateway: пустая трата сил или полезный инструмент? / Василий Сошников (Quantil Inc.)

4. Рассказ про API Gateway от EPAM

5. Мастер-класс "Как построить BFF (backend for frontend) или API Gateway"



#архитектура