Микросервисы давно перестали быть экзотикой: по данным исследования, освещённого DZone (2023), около 63% предприятий уже перешли на микросервисную архитектуру, а среднее число сервисов в организации приближается к двум сотням. Как только сервисов становится много, встаёт вопрос: как внешним клиентам — веб-фронтенду, мобильному приложению, партнёрским интеграциям — обращаться к этому «созвездию» бэкендов, не увязая в его внутреннем устройстве? Ответ, который сформулировал ещё Крис Ричардсон в каноническом каталоге паттернов microservices.io и который подробно разбирает Microsoft Azure Architecture Center, — API Gateway, единая точка входа между клиентами и микросервисами. Разберёмся, что это такое, какую проблему шлюз решает, как он работает и как выбрать конкретное решение под проект.
TL;DR. API Gateway — единая точка входа между клиентами и микросервисами. Он берёт на себя маршрутизацию запросов, аутентификацию, ограничение частоты (rate limiting), агрегацию ответов и логирование, скрывая внутреннее устройство системы. Шлюз нужен, когда сервисов много и клиентов несколько; для монолита или двух-трёх сервисов он избыточен — начните с обычного reverse proxy.
Что такое API Gateway простыми словами
API Gateway — это сервер-посредник, единая точка входа, через которую все внешние запросы попадают к микросервисам. По своей природе шлюз — это специализированный reverse proxy (обратный прокси): клиент обращается не напрямую к десяткам сервисов, а к одному адресу, а шлюз уже сам решает, какому внутреннему сервису переадресовать запрос и что сделать с ответом.
Хорошая бытовая аналогия — ресепшн в большом бизнес-центре. Посетитель не бегает по этажам в поисках нужного отдела и не должен знать, что бухгалтерия сидит на пятом этаже, а юристы — на седьмом. Он подходит к одной стойке, называет, что ему нужно, — и его направляют куда следует, попутно проверив пропуск и записав визит в журнал. API Gateway играет роль такой стойки для цифровой системы: принимает запрос, проверяет права, находит адресата и возвращает результат, пряча за собой всю внутреннюю «планировку».
Как это выглядит на схеме
Схематично поток выглядит так: Клиент → API Gateway → Сервис A / Сервис B / Сервис C. Слева — разные типы клиентов (браузер, мобильное приложение, внешние партнёры); в центре — шлюз, единственный публично доступный узел; справа — внутренние микросервисы, которые «наружу» не выставлены вообще. Клиент знает только адрес шлюза и его контракт; внутренние адреса, порты и протоколы сервисов остаются деталью реализации, которую можно менять, не трогая клиентов. Это ключевое свойство: шлюз развязывает клиента и внутреннюю структуру системы.
Проблема, которую решает шлюз: почему не обращаться к сервисам напрямую
Прямой доступ клиента ко всем микросервисам порождает целый букет проблем, которые быстро становятся дороже самого шлюза. Когда каждый клиент вынужден знать адреса и контракты десятков сервисов, система теряет гибкость и устойчивость. Вот что конкретно ломается (список во многом опирается на разбор проблем без шлюза из документации Microsoft Azure):
- Сложный клиентский код. Клиент должен знать эндпоинты всех сервисов, их протоколы и способы аутентификации. Каждый экран мобильного приложения превращается в оркестратор из нескольких вызовов — логика раздувается там, где ей быть не должно.
- Жёсткая связанность (tight coupling). Внутренняя декомпозиция на сервисы «протекает» наружу. Стоит разделить один сервис на два или переименовать эндпоинт — и придётся обновлять всех клиентов, включая мобильные приложения, которые пользователь может не обновлять месяцами.
- Лишние round-trip и latency. Чтобы собрать один экран, клиент делает 5–10 отдельных запросов по медленной мобильной сети. Задержки суммируются, интерфейс тормозит.
- Дублирование сквозной логики (cross-cutting concerns). Аутентификацию, TLS, ограничение частоты, логирование приходится реализовывать в каждом сервисе заново — это дублирование кода и источник расхождений в поведении.
- Расширение поверхности атаки. Каждый публично выставленный сервис — отдельная дверь, которую нужно защищать и мониторить. Чем больше дверей, тем выше риск.
- Ограничения протоколов. Внутри система может общаться по gRPC, AMQP или другим «неудобным» для браузера протоколам. Клиенту же нужен привычный HTTP/JSON — кто-то должен транслировать одно в другое.
API Gateway снимает всё это разом: клиент общается с одним понятным контрактом, а внутреннюю кухню — декомпозицию, протоколы, безопасность — шлюз прячет и берёт на себя.
Как работает API Gateway: путь запроса
По сути шлюз — это конвейер обработки запроса: он проводит каждый входящий вызов через цепочку фильтров, прежде чем (и после того как) обратиться к внутренним сервисам. Типовой путь запроса выглядит так:
- Приём запроса. Клиент обращается к публичному адресу шлюза; тот принимает HTTP(S)-запрос и терминирует TLS.
- Аутентификация и авторизация. Шлюз проверяет токен (JWT, OAuth 2.0, API-ключ), убеждается, что клиент имеет право на этот ресурс. Не прошёл — запрос отклоняется, не доходя до сервисов.
- Определение маршрута. По пути, методу и заголовкам шлюз выбирает целевой сервис (или несколько) согласно правилам маршрутизации.
- Pre-фильтры и трансформация. Проверка лимитов (rate limiting), нормализация заголовков, преобразование протокола, обогащение запроса служебными данными.
- Вызов сервиса (или нескольких). Шлюз проксирует запрос во внутренний сервис. При агрегации — параллельно обращается к нескольким сервисам.
- Агрегация ответа. Если данные собирались из разных источников, шлюз объединяет их в один ответ, удобный клиенту.
- Post-фильтры. Кэширование результата, сжатие (gzip), запись метрик и логов, добавление заголовков безопасности.
- Ответ клиенту. Клиент получает единый ответ, ничего не зная о том, сколько сервисов участвовало в его формировании.
Синхронная маршрутизация против агрегации (fan-out)
Различают два базовых режима. В режиме простой маршрутизации (proxying) шлюз один-к-одному переадресует запрос нужному сервису и возвращает его ответ — это «умный прокси». В режиме агрегации (fan-out / API composition) один входящий запрос порождает несколько параллельных вызовов к разным сервисам, а шлюз собирает их ответы в единый документ. Первый режим снижает связанность, второй — ещё и сокращает число обращений клиента по сети, что особенно ценно для мобильных приложений.
Ключевые функции API Gateway
Ценность шлюза в том, что он централизует сквозную функциональность, которую иначе пришлось бы дублировать в каждом сервисе. Ниже — основные функции API Gateway и то, что каждая из них даёт команде и бизнесу.
| Функция | Что делает | Что даёт бизнесу и команде |
| Маршрутизация (L7 routing) | Направляет запрос нужному сервису по пути, методу, заголовкам; поддерживает версии API | Клиент не знает внутренних адресов; сервисы можно менять и версионировать незаметно |
| Аутентификация и авторизация | Единая проверка токенов (JWT, OAuth 2.0, API-ключи) на входе | Безопасность в одном месте, а не размазана по сервисам; меньше ошибок |
| Rate limiting / throttling | Ограничивает частоту запросов на клиента или ключ | Защита от перегрузки и злоупотреблений; основа для тарифных планов публичного API |
| Агрегация ответов (API composition) | Собирает данные из нескольких сервисов в один ответ | Меньше round-trip, быстрее интерфейс, проще клиентский код |
| Кэширование ответов | Хранит и отдаёт частые ответы, не дёргая сервисы | Ниже нагрузка на бэкенд, быстрее отклик |
| SSL/TLS termination и mTLS | Расшифровывает трафик на входе, поднимает mTLS к сервисам | Централизованное управление сертификатами; сервисы разгружены от криптографии |
| Логирование, мониторинг, трассировка | Собирает метрики и сквозные трейсы по всем запросам | Видимость и наблюдаемость системы из единой точки |
| WAF и фильтрация | Отсекает вредоносные запросы, защищает от типовых атак | Меньше поверхность атаки, выше безопасность периметра |
| Трансформация протоколов и сжатие | Переводит HTTP/JSON ↔ gRPC/другие, сжимает ответ (gzip) | Клиенту — привычный протокол; экономия трафика |
Важно: не обязательно включать всё сразу. Хорошая практика — начать с маршрутизации, аутентификации и TLS, а кэш, агрегацию и WAF подключать по мере роста требований. Шлюз должен оставаться тонким слоем инфраструктуры, а не превращаться в «свалку» логики (об этом — в разделе о рисках).
Паттерны применения API Gateway
За общим словом «шлюз» скрывается несколько разных паттернов, которые описаны у Криса Ричардсона и в архитектурных гайдах Microsoft. Понимание того, какой именно паттерн вам нужен, помогает не переусложнить систему.
Gateway Routing (маршрутизация)
Базовый паттерн: шлюз выступает reverse proxy и маршрутизирует запросы к сервисам по правилам (путь, заголовки, версия). Применяют, когда нужно спрятать за одним адресом множество сервисов и получить возможность менять их расположение, не трогая клиентов. Это фундамент, поверх которого достраиваются остальные паттерны.
Gateway Offloading (вынос сквозной логики)
Шлюз берёт на себя функции, общие для всех сервисов: TLS termination, аутентификацию, rate limiting, логирование, кэш, сжатие. Применяют, чтобы не дублировать эту логику в каждом сервисе и управлять ею централизованно. Это главный аргумент «за» шлюз с точки зрения экономии на поддержке.
Gateway Aggregation / API Composition (агрегация)
Шлюз (или отдельный композиционный слой) объединяет данные из нескольких сервисов в один ответ. Применяют, когда клиенту для одного экрана нужны данные из разных источников, а делать 5–10 запросов по сети дорого. Экономит round-trip и упрощает клиента, но добавляет шлюзу ответственности — важно не переусердствовать.
Backend for Frontend (BFF)
Вместо одного универсального шлюза для всех клиентов создают отдельный шлюз под каждый тип клиента: свой BFF для веба, свой — для мобильного приложения, свой — для партнёрского API. Каждый BFF заточен под потребности своего клиента: отдаёт ровно те поля и в том формате, что нужны именно ему. Паттерн описан на microservices.io и хорошо подходит, когда у веба и мобильного приложения сильно расходятся требования к данным. Цена — больше кода и инфраструктуры, поэтому BFF оправдан при заметной разнице между клиентами.
API Gateway против балансировщика, reverse proxy и service mesh
Главный источник путаницы: API Gateway часто смешивают с балансировщиком нагрузки, «голым» reverse proxy и service mesh — хотя это разные инструменты, решающие разные задачи. Ключевой тезис: шлюз ≠ балансировщик, и шлюз ≠ service mesh; на практике они нередко работают вместе. Разложим по осям.
| Инструмент | Уровень | Зона трафика | Основные задачи | Когда применять |
| API Gateway | L7 (приложение) | North-south (вход извне) | Маршрутизация по API, аутентификация, лимиты, агрегация, версии API | Единая дверь для внешних клиентов к множеству сервисов |
| Load Balancer | L4, реже L7 | North-south и внутри | Распределение однотипных запросов между копиями сервиса | Нужно масштабировать один сервис на несколько инстансов |
| Reverse Proxy (NGINX «голый») | L7 | North-south | Проксирование, TLS, базовая маршрутизация и кэш | Простой вход для одного-нескольких сервисов без API-логики |
| Service Mesh (Istio, Linkerd) | L7 (сайдкары) | East-west (между сервисами) | mTLS, retry, трассировка, политика трафика внутри системы | Много сервисов активно общаются друг с другом внутри |
Проще всего запомнить так: балансировщик отвечает на вопрос «какой из одинаковых инстансов возьмёт запрос», reverse proxy — это упрощённый шлюз без API-функций, API Gateway управляет входящим (north-south) трафиком и понимает API, а service mesh управляет трафиком между сервисами (east-west). Они не исключают друг друга: типичная крупная система ставит балансировщик перед несколькими копиями шлюза, шлюз — на входе для внешних клиентов, а mesh — внутри для межсервисного взаимодействия. Именно единого раздела с таким разведением обычно не хватает в статьях-конкурентах, хотя путаница здесь встречается чаще всего.
Недостатки и риски: единая точка отказа
У централизации есть обратная сторона: шлюз, через который проходит весь трафик, становится единой точкой отказа и потенциальным узким местом. Игнорировать это нельзя — но каждый риск управляем.
- Единая точка отказа (SPOF). Упал шлюз — недоступна вся система. Митигируется отказоустойчивостью: несколько инстансов шлюза за балансировщиком, авто-масштабирование, health-checks. Шлюз обязан быть развёрнут в HA-конфигурации.
- Дополнительная задержка. Каждый запрос делает лишний хоп через шлюз. На практике это единицы миллисекунд, которые с лихвой компенсируются кэшем и агрегацией, — но тяжёлую логику в шлюз тащить нельзя.
- Операционная сложность и владелец конфигурации. Шлюз — ещё один компонент, который нужно настраивать, обновлять и мониторить. Нужна ясная зона ответственности: кто владеет правилами маршрутизации и лимитов.
- Риск «god object». Соблазн затащить в шлюз бизнес-логику превращает тонкий инфраструктурный слой в монолит-переросток, от которого зависят все команды. Это антипаттерн: шлюз должен маршрутизировать и выполнять сквозные функции, но не знать бизнес-правила сервисов.
Вывод простой: риски шлюза — это не повод от него отказываться, а требования к тому, как его разворачивать. HA, тонкий слой без бизнес-логики и чёткое владение конфигурацией снимают большинство проблем.
Обзор решений: что выбрать
Писать шлюз с нуля почти никогда не нужно — на рынке достаточно зрелых open-source и облачных решений, включая российские. Ниже — ориентир по популярным вариантам, включая Yandex API Gateway и VK Cloud для проектов с требованием хранить данные внутри страны.
| Решение | Тип | Ключевые особенности | Когда брать |
| Kong | Open-source / self-hosted, есть managed | Плагинная архитектура, богатая экосистема, на базе NGINX | Нужен гибкий, расширяемый шлюз под свой контур |
| NGINX / NGINX Plus | Open-source / коммерческий | Проверенный reverse proxy, высокая производительность | Простая маршрутизация и TLS без тяжёлого API-слоя |
| KrakenD | Open-source, stateless | Заточен под агрегацию, очень высокая производительность, конфиг-декларативно | Нужна быстрая агрегация ответов без плагинов-состояний |
| Tyk | Open-source / managed | Встроенный dev-portal, аналитика, управление ключами | Публичное API с тарифами и порталом для разработчиков |
| Traefik | Open-source | Автоконфигурация под Docker/Kubernetes, service discovery | Контейнерная среда, динамическая маршрутизация |
| AWS API Gateway | Managed (облако) | Serverless, интеграция с Lambda, оплата за запросы | Проект целиком в экосистеме AWS |
| Azure API Management | Managed (облако) | Полный API-менеджмент, портал, политики | Инфраструктура на Azure, корпоративный API-менеджмент |
| Yandex API Gateway | Managed (облако РФ), serverless | Интеграция с Yandex Cloud Functions, данные в РФ | Serverless-нагрузка, требования 152-ФЗ, российское облако |
| VK Cloud | Managed (облако РФ) | Балансировка, API-функции, российская инфраструктура | Проект в российском облаке, хранение данных внутри страны |
Самописный шлюз против коробочного решения
Кастомный шлюз оправдан редко — обычно когда требования к маршрутизации или интеграции с внутренними системами настолько специфичны, что ни один готовый продукт их не закрывает. Во всех остальных случаях выгоднее взять коробочное или облачное решение: оно закрывает аутентификацию, лимиты, кэш и мониторинг из коробки, проверено на нагрузке и не требует «изобретать велосипед». Помните: любой самописный компонент придётся поддерживать своими силами весь срок жизни продукта — это скрытая, но постоянная статья расходов. Если вы строите бэкенд и сомневаетесь, где провести границу между готовым и кастомным, эту развилку удобно проработать вместе с командой на этапе аналитики — например, в рамках услуги разработка API и серверной части.
Когда API Gateway нужен, а когда нет
API Gateway — это инструмент под масштаб, а не обязательный атрибут любого проекта: на раннем этапе он чаще вредит, чем помогает. Разведём два сценария явно.
Шлюз нужен, когда:
- сервисов много (условно от пяти-семи и больше), и их число растёт;
- у системы несколько типов клиентов с разными потребностями (веб, мобайл, партнёры);
- есть публичное API, которому нужны версии, тарифы и лимиты;
- предъявляются серьёзные требования к безопасности, централизованной аутентификации и rate limiting;
- сервисы используют разные протоколы, а клиенту нужен единый HTTP/JSON.
Шлюз избыточен, когда:
- у вас монолит — одна дверь и так одна, шлюз ничего не добавит;
- всего 2–3 внутренних сервиса с одним клиентом — хватит reverse proxy или балансировщика;
- ранний MVP, где важнее скорость проверки гипотез, чем инфраструктурная зрелость;
- нет команды, готовой владеть конфигурацией и отказоустойчивостью шлюза.
Разумная стратегия эволюции: начните с простого reverse proxy (тот же NGINX), а полноценный API Gateway вводите тогда, когда число сервисов и типов клиентов реально этого потребует. Преждевременное внедрение шлюза — это тот же over-engineering, что и преждевременные микросервисы. Если вы только проектируете архитектуру продукта, имеет смысл заложить точку входа сразу правильно — это часть работы над разработкой веб-приложений, где решения о структуре бэкенда принимаются на старте.
Часто задаваемые вопросы (FAQ)
Чем API Gateway отличается от обычного балансировщика нагрузки?
Балансировщик распределяет однотипные запросы между копиями одного сервиса и работает в основном на транспортном уровне (L4). API Gateway работает на уровне приложения (L7): он понимает пути, методы и заголовки, маршрутизирует запросы к разным сервисам по правилам, а заодно берёт на себя аутентификацию, ограничение частоты и агрегацию ответов. Часто их используют вместе: балансировщик стоит перед несколькими копиями самого шлюза.
Замедляет ли API Gateway работу системы?
Шлюз добавляет один дополнительный сетевой хоп, поэтому чисто теоретически задержка растёт на единицы миллисекунд. На практике грамотно настроенный шлюз чаще ускоряет систему: он кэширует ответы, агрегирует несколько вызовов в один и снимает с клиента лишние round-trip. Заметное замедление появляется только если в шлюз затащили тяжёлую бизнес-логику — это антипаттерн.
Нужен ли API Gateway, если у меня всего 2–3 сервиса?
Обычно нет. Для монолита или двух-трёх внутренних сервисов отдельный шлюз — избыточная сложность и лишняя точка отказа. На старте достаточно reverse proxy (NGINX) или облачного балансировщика с базовой маршрутизацией и TLS. API Gateway оправдан, когда сервисов становится много, появляются разные типы клиентов и растут требования к безопасности и лимитам.
API Gateway и service mesh — это одно и то же?
Нет. API Gateway управляет входящим трафиком «снаружи внутрь» (north-south): он — единая дверь для внешних клиентов. Service mesh (Istio, Linkerd) управляет трафиком между сервисами внутри системы (east-west): mTLS, повторные попытки, трассировка на каждом вызове. Это дополняющие друг друга инструменты, а не замена: крупные системы часто используют и шлюз на входе, и mesh внутри.
Можно ли написать свой API Gateway или лучше взять готовый?
В подавляющем большинстве случаев выгоднее взять готовое решение — Kong, NGINX, KrakenD, Traefik или облачный шлюз. Они закрывают аутентификацию, лимиты, кэш и мониторинг из коробки и проверены на нагрузке. Самописный шлюз оправдан редко: при уникальных требованиях к маршрутизации или интеграции с внутренними системами, и всегда с пониманием, что его придётся поддерживать своими силами.
Какой API Gateway выбрать для проекта в России?
Для serverless-нагрузок и быстрого старта подойдёт Yandex API Gateway или сервисы VK Cloud — они управляемые и интегрированы с российской облачной инфраструктурой, что важно для хранения данных внутри страны. Если нужен полный контроль и self-hosted-решение — берут open-source Kong, NGINX или KrakenD и разворачивают в собственном контуре. Выбор зависит от требований 152-ФЗ, ожидаемой нагрузки и наличия DevOps-компетенций в команде.
Строите микросервисную систему?
Спроектируем единую точку входа, надёжный API-слой и серверную часть под вашу нагрузку — от аналитики до эксплуатации.




