API-шлюз
API-шлюз (англ. API Gateway) — это промежуточный сервер (или служба), который выступает единой точкой входа для клиентских запросов к внутренним микросервисам, API или бэкенд-системам. API-шлюз выполняет функции маршрутизации, аутентификации, авторизации, ограничения скорости (rate limiting), кэширования, трансформации протоколов и агрегации ответов, скрывая внутреннюю архитектуру от внешних клиентов.
История
Концепция API-шлюза возникла в конце 2000-х — начале 2010-х годов в связи с распространением архитектуры микросервисов. В монолитных приложениях единая точка входа не требовалась, так как все функции были частью одного процесса. С переходом к микросервисам, когда приложение разбивается на множество независимых сервисов, у каждого из которых может быть свой API, возникла необходимость в унифицированном интерфейсе для клиентов (веб-браузеров, мобильных приложений, внешних систем).
Первые коммерческие решения, такие как Amazon API Gateway (запущен в 2015 году) и Kong (изначально open-source, 2015), стали стандартом де-факто. В 2016 году Netflix опубликовал собственную реализацию API-шлюза — Zuul, которая позже вошла в экосистему Spring Cloud. Параллельно развивались шлюзы на основе NGINX и Envoy (2016), а также облачные сервисы от Google (Apigee, Cloud Endpoints) и Microsoft (Azure API Management).
Классификация
API-шлюзы можно разделить по способу развёртывания и функциональности:
По способу развёртывания
- Облачные (managed) — предоставляются как сервис (SaaS): Amazon API Gateway, Azure API Management, Google Cloud Apigee, Yandex API Gateway. Не требуют управления инфраструктурой.
- Самостоятельные (self-hosted) — развёртываются на собственном оборудовании или в контейнерах: Kong, Tyk, Apache APISIX, KrakenD, NGINX Plus.
- Встраиваемые (embedded) — встраиваются в код приложения или в sidecar-контейнер (например, Envoy в составе сервисной сетки Istio).
По функциональному назначению
- Шлюзы для микросервисов — маршрутизация, балансировка, аутентификация, агрегация.
- Шлюзы для внешних API — публикация, управление ключами, мониторинг использования, биллинг.
- Шлюзы для внутренних API — изоляция внутренних сервисов, контроль доступа, кэширование.
Устройство и характеристики
Типичный API-шлюз состоит из следующих компонентов:
- Маршрутизатор — на основе URL, заголовков, метода HTTP или параметров запроса направляет запрос к соответствующему сервису.
- Аутентификатор — проверяет идентификацию клиента (токены JWT, OAuth 2.0, API-ключи, сертификаты).
- Авторизатор — проверяет права доступа (роли, политики, ACL).
- Ограничитель скорости — предотвращает превышение лимитов запросов (rate limiting, throttling, quota).
- Трансформатор — преобразует запросы/ответы: изменение формата (JSON → XML), добавление/удаление заголовков, перекодировка.
- Кэш — временное хранение ответов для снижения нагрузки на бэкенд.
- Балансировщик нагрузки — распределение запросов между несколькими экземплярами сервиса.
- Логирование и мониторинг — сбор метрик, логов, трассировка запросов.
Характеристики
- Пропускная способность — измеряется в запросах в секунду (RPS). Для облачных шлюзов обычно высокая (до десятков тысяч RPS), для self-hosted зависит от аппаратного обеспечения.
- Задержка (latency) — дополнительное время обработки, вносимое шлюзом. Обычно составляет 1–10 мс для self-hosted и 10–50 мс для облачных.
- Протоколы — HTTP/1.1, HTTP/2, gRPC, WebSocket, GraphQL, SOAP.
- Масштабируемость — горизонтальное масштабирование (добавление экземпляров) или вертикальное (увеличение ресурсов).
- Безопасность — поддержка TLS, защита от DDoS, WAF (Web Application Firewall), проверка подлинности.
Применение
API-шлюзы используются в следующих сценариях:
Микросервисная архитектура
В микросервисной архитектуре API-шлюз является обязательным компонентом. Он скрывает от клиента сложность внутренней структуры, обеспечивает единую точку входа для всех сервисов, реализует сквозную аутентификацию и авторизацию, а также агрегирует ответы от нескольких сервисов в один. Например, при загрузке страницы интернет-магазина шлюз может одновременно запросить данные о товаре, цене, отзывах и наличии на складе, объединив их в один ответ.
Публикация внешних API
Компании, предоставляющие API сторонним разработчикам (например, платёжные системы, сервисы карт, погоды), используют API-шлюзы для управления доступом: выдача API-ключей, ограничение числа запросов, мониторинг использования, биллинг. Примеры: Amazon API Gateway, Google Cloud Endpoints, Yandex API Gateway.
Безопасность и контроль доступа
API-шлюз может выступать как единый барьер безопасности: проверять токены, блокировать подозрительные запросы, фильтровать SQL-инъекции и XSS-атаки, ограничивать частоту запросов от одного IP.
Трансформация протоколов
Шлюз может преобразовывать запросы из одного протокола в другой, например, из REST (HTTP/JSON) в gRPC (HTTP/2/Protobuf) или наоборот, что позволяет интегрировать старые системы с новыми.
Кэширование
Для часто запрашиваемых данных (например, список стран, курсы валют) шлюз может кэшировать ответы, снижая нагрузку на бэкенд и ускоряя ответ клиенту.
Примеры популярных API-шлюзов
- Amazon API Gateway — облачный сервис от AWS, поддерживает REST, HTTP, WebSocket, интеграцию с Lambda, DynamoDB, S3. Позволяет создавать, публиковать и мониторить API.
- Kong — open-source (лицензия Apache 2.0) и коммерческая версия. Работает на основе NGINX и OpenResty. Поддерживает плагины (аутентификация, кэширование, логирование).
- NGINX Plus — коммерческая версия веб-сервера NGINX с функциями API-шлюза (маршрутизация, балансировка, аутентификация, rate limiting).
- Envoy — высокопроизводительный прокси-сервер, часто используется в сервисных сетках (Istio, Consul). Поддерживает gRPC, HTTP/2, WebSocket.
- Tyk — open-source (лицензия MPL 2.0) и коммерческая версия. Имеет встроенный портал разработчика, поддержку GraphQL, аналитику.
- Apache APISIX — open-source (лицензия Apache 2.0), поддерживает динамическую маршрутизацию, плагины, gRPC, WebSocket.
- Yandex API Gateway — облачный сервис от Яндекса, интегрирован с Yandex Cloud Functions, Yandex Serverless Containers, Yandex Object Storage. Поддерживает REST, HTTP, WebSocket.
- Azure API Management — облачный сервис от Microsoft, включает портал разработчика, аналитику, политики безопасности, поддержку OpenAPI (Swagger).
Критика
Несмотря на широкое распространение, API-шлюзы имеют ряд недостатков:
- Единая точка отказа — если шлюз выходит из строя, все внешние запросы блокируются. Для снижения риска требуется резервирование и балансировка.
- Дополнительная задержка — каждый запрос проходит через шлюз, что добавляет задержку, особенно при большом количестве преобразований.
- Сложность конфигурации — настройка правил маршрутизации, аутентификации, ограничений и трансформаций может быть трудоёмкой, особенно в крупных системах.
- Риск излишней централизации — если шлюз берёт на себя слишком много функций (агрегация, бизнес-логика), он может стать узким местом и усложнить развитие системы.
- Стоимость — облачные шлюзы взимают плату за количество запросов, объём переданных данных и дополнительные функции (аналитика, WAF). Self-hosted требуют затрат на инфраструктуру и администрирование.
Источники
- Amazon Web Services. «What is an API Gateway?» — AWS Documentation.
- Kong Inc. «API Gateway: What is it and why do you need one?» — Kong Blog.
- Microsoft. «What is Azure API Management?» — Microsoft Docs.
- Google Cloud. «API Gateway overview» — Google Cloud Documentation.
- Yandex Cloud. «Yandex API Gateway» — Yandex Cloud Documentation.
- Fielding, R. T. (2000). «Architectural Styles and the Design of Network-based Software Architectures» — диссертация, описывающая REST.
- Newman, S. (2015). «Building Microservices: Designing Fine-Grained Systems» — O'Reilly Media.
- Richardson, C. (2018). «Microservices Patterns» — Manning Publications.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →