Про API Gateway простыми словами

Что это такое?

Сейчас большая часть сетевого взаимодействия приходится на интерфейсы прикладного программирования, а именно - API.

API Gateway - это базовый паттерн, вокруг которого строится микросервисная архитектура. По смыслу это маршрутизатор API-запросов, который получает на вход все запросы клиента, обрабатывает и рассылает разным сервисам, а после отсылает ответ обратно клиенту.

Пример: у нас есть приложение для заказа товаров. В нем есть два модуля - первый отвечает за регистрацию и авторизацию пользователя, а второй за всю остальную логику. У первого модуля конечной точкой будет /auth, у второго - /order.

Суть API Gateway заключается в том, что с клиента на сервер и запросы /auth, и /order приходят на этот шлюз. Внутри они могут обрабатываться, логироваться и кэшироваться, а после они будут отправлены уже целевому сервису, что вы можете увидеть на картинке ниже.
рис.1 Использование API шлюза

Зачем его используют?

Маршрутизатор выполняет множество задач: обрабатывает и распределяет запросы, контролирует трафик, осуществляет мониторинг и контроль доступа. Также разработчики в один запрос могут вложить несколько действий, благодаря которым по требованию пользователя будут задействованы функции нескольких сервисов.

Приведем пример - пользователь открыл карточку интернет-магазина с компьютерной техникой. Один сервис отвечает за изображение этого товара, другой проверяет наличие в БД, а в третьем записана справочная информация.

Если бы не API Gateway, эти запросы выполнялись бы последовательно, и мы бы наблюдали постепенную загрузку элементов на странице. Но благодаря шлюзу все три действия выполнятся по одному запросу, а после обратно отправляется один ответ.

И это лишь одно из преимуществ API Gateway. Вот еще парочка:
  • Route
  • Безопасность
  • Кеширование
  • Построения сервера для фронта приложений одностраничников
  • Разделение клиентского программного интерфейса от вашей внутренней реализации

Облачные API-Gateway

Еще существуют облачные API-Gateway. По сути те же маршрутизаторы, но размещены они в облаке и выполняют ряд других функций: интеграции с облачными решениями, мониторинг API, создание новых API, быстрое масштабирование и другие.

Это готовые решения, которые спасут, если нет желания проектировать свой API Gateway с нуля. Да и специальных знаний для настройки и мониторинга они не требуют.

Популярные облачные решения:
  • Azure API Management
  • Amazon API Gateway
  • Oracle

Как работает API-Gateway

Давайте разберемся подробнее, что происходит, когда потребитель API шлет запрос на шлюз API:
  1. Запрос авторизируется, проверяется и изменяется для конечной точки в микросервисе. Этот процесс часто именуют «потоком запросов»;
  2. Запрос переправляется на соответствующую службу/ы. Пример: в Amazon API Gateway запрос переправляется на функцию в AWS Lambda или другом ресурсе AWS. Запись может сохраниться в базе данных, или некоторые твиты передаются в потоковом режиме (зависит от того, какой был запрос).
  3. Некоторые сквозные задачи, которые являются общими для сервисов (аутентификация, авторизация, SSL, ведение журналов и так далее) могут выполняться сразу же на уровне шлюза
  4. Финалочка: Запрос снова будет преобразован для возвращения клиенту. Хотя шлюз API часто направляет запрос к нескольким службам, он объединяет результаты в один ответ. Этот ответ может включать код состояния HTTP, который подтвердит, что запрос успешно прошел. Соответственно логике из пункта один, данный процесс величаем «поток ответа».

Плюсы и минусы API-Gateway

Плюсы API шлюза:
  • Клиенты изолированы от структуры сервисов
  • Клиентам не нужно самим определять, куда располагать сервис
  • Подходящий для каждого типа клиента API
  • Можно собрать данные сразу из нескольких сервисов, следовательно, сокращается количество обращений и улучшается пользовательский опыт
  • Предоставляет упрощенный API, за него можно прятать много вызовов внутренних сервисов
  • Преобразует публичный API во внутренние вызовы и протоколы
Куда ж без минусов:
  • Сложность при реализации - это дополнительная система, которую нужно разработать, выпустить и поддерживать
  • Время отклика растет из-за дополнительных вызовов и затрат, чтобы обработать сервис
Больше информации про архитектуру
Вы можете найти на нашем курсе по Архитектурным паттернам разработки ПО