Давайте вначале обозначим базовые концепции и посмотрим на разницу.
API gateway - сервис скрывающий за собой ряд внутренних сервисов:
BFF (Backend-for-Frontend) - это API gateway сервис, но для определенного типа клиента:
В итоге:
API gateway - решает проблемы сразу нескольких клиентов
BFF - решает проблемы только одного клиента
Проблемы которые решает API gateway и BFF:
Изолирует клиентов от того, как приложение разделено на микросервисы.
Изолирует клиентов от проблемы определения местоположения экземпляров службы.
Предоставляет оптимальный API для каждого клиента
Уменьшает количество запросов/обратных передач. Например, шлюз API позволяет клиентам извлекать данные из нескольких служб за один цикл. Меньшее количество запросов также означает меньшие накладные расходы и улучшает взаимодействие с пользователем. Шлюз API необходим для мобильных приложений.
Упрощает клиент, перемещая логику вызова нескольких служб с клиента на шлюз API.
Переводит из «стандартного» общедоступного веб-протокола API в любые протоколы, используемые внутри компании.
Недостатки API gateway:
Повышенная сложность — шлюз API — это еще одна движущаяся часть, которую необходимо разрабатывать, развертывать и управлять
Увеличение времени отклика из-за дополнительного сетевого перехода через API-шлюз, однако для большинства приложений стоимость дополнительного кругового пути незначительна.
Важно: по возможности должен использовать асинхронные запросы.