Добро пожаловать в современный интернет, где большая часть взаимодействия приходится на интерфейсы прикладного программирования — API. На API держится цифровой бизнес: с ними стало возможным предоставлять и получать услуги через приложения и подключённые к Сети устройства. Платёжные системы? Работают через API. Интерактивная карта, показывающая, как добраться от метро до офиса? Снова API. Даже бэкенд строится на API.
Похоже, мы окружены — значит, придётся разбираться. Что такое API, на Хабре уже рассказывали, а я предлагаю рассмотреть поподробнее реализацию API Gateway на облачных платформах.
Зачем вообще нужны API Gateway
При работе с микросервисной архитектурой рано или поздно приходится столкнуться с проблемой, которой нет у монолитных систем, — с необходимостью получать и обрабатывать данные из нескольких источников для обслуживания одного-единственного запроса.
Представьте себе: у вас есть интернет-магазин по продаже реплик молота Тора. Для удобства пользователя имеется как сайт под десктоп и мобильные устройства, так и приложения для Android и iPhone, которые взаимодействуют с сервером через REST API.
Чтобы на странице товара отображались верные данные, нам нужно обратиться к нескольким службам: в одной учитывается наличие молота, в другой записаны материал, вес и длина ручки, в третьей сохраняются отзывы клиентов, а цена вообще указана в четвёртой. API Gateway позволяет обойтись одним запросом.
API Gateway выполняет множество задач: принимает, обрабатывает и распределяет запросы, контролирует трафик, осуществляет мониторинг и контроль доступа.
В микросервисной архитектуре паттерн API Gateway появился в качестве службы, обеспечивающей единую точку входа для веб-приложений и API, эдакой «серверной части для клиентской части». В чём польза именно для микросервисов?
Например — возможность повторного использования компонентов, упрощение бэкенда приложения, обеспечение доступа к статическим веб-страницам и документам, удобная проверка авторизации и подбор оптимального для каждого типа клиента API — как это делает Netflix API Gateway.
Что такое облачные API Gateway
Облачные структуры заимствуют многие паттерны микросервисов — в том числе API Gateway и необходимость в их применении. API Gateway упрощает интеграцию приложения с сервисами облачной платформы и позволяет в полной мере использовать её возможности.
Классический API Gateway представляет собой шлюз между пользователями и любым количеством сервисов (API), выполняющий функцию обратного прокси, как Nginx и HAProxy. В то же время облачная версия API Gateway — уже полноценный сервис для разработчиков, который простым в исполнении не назовёшь.
Основная задача та же самая — приём и обработка запросов от клиентов к службам, а также управление доступом приложения к данным, бизнес‑логике или функциональным возможностям сервисов.
Только облачные API Gateway на этом не останавливаются и предлагают множество дополнительных услуг: быстрое масштабирование, интеграцию с облачными сервисами, контроль доступа и настройку безопасности, создание и публикацию API, мониторинг API и тому подобное. Гораздо проще, чем создавать API Gateway с нуля, — да и знаний требуется гораздо меньше.
Как облачные API Gateway облегчают жизнь
Итак, в разработке всё чаще применяются облачные технологии — и закономерно возникает вопрос об облачных шлюзах API, их особенностях и преимуществах. Стоит ли их применять или лучше как-нибудь по старинке?
Для чего разработчики вообще выбирают облачные API Gateway?
Чтобы сократить время разработки — API Gateway создаётся в несколько кликов, а интеграция с облачными сервисами выбранной платформы занимает пару минут.
Чтобы обеспечить минимальную задержку ответа на запрос — об этом позаботится система автоматического масштабирования.
Чтобы лучше контролировать трафик — к примеру, с помощью ограничения нагрузки на количество запросов в секунду для каждого HTTP‑метода. А при необходимости можно сформировать кеш с настраиваемыми ключами и указанием жизненного срока в секундах.
Чтобы отлаживать API встроенными средствами — меньше головной боли.
Чтобы генерировать клиентские SDK.
Чтобы одновременно использовать нескольких версий одного API, а также управлять стадиями выпуска от альфы до релиза.
Чтобы контролировать доступ к API и управлять его жизненным циклом от создания до публикации.
Чтобы уведомление приходило от сервиса, а не от разозлённого клиента, если что-то идёт не так.
Чтобы настраивать авторизацию удобным методом — с помощью средств Lambda или токенов OAuth.
Чтобы отслеживать показатели — к примеру, количество запросов, задержку вызова и количество ошибок — на удобной панели мониторинга с визуальным интерфейсом.
Чтобы платить только за количество запросов в месяц — или пользоваться сервисами бесплатно, если не выходить за рамки определённой цифры.
Как используют облачные API Gateway
Простое приложение, состоящее из двух конечных точек — POST для записи сообщений и GET для извлечения трёх последних сообщений. Реализовано с помощью AWS Gateway, AWS DynamoDB, AWS Serverless Application Model и Lambda.
Рецепт сервиса записи к врачу и регистрации в поликлинике, разработанный коммуникационной платформой Voximplant и Yandex.Cloud.
Запуск бота на Python внутри одного из облачных сервисов, а именно — Yandex.Cloud.
Один из вариантов решения для сбора данных пульсовой оксиметрии для нескольких пользователей, отслеживания этих данных и обмена ими. Фронт написан на VueJS, бэкенд реализован с применением Amazon API Gateway.
Пошаговая инструкция по деплою статического сайта в облако, прикрутке к нему сертификата Let’s Encrypt, домена второго уровня и настройке API-шлюза в системе Yandex.Cloud.
И снова приложение на микросервисах — реализация клиентской части на VueJS, взаимодействие настроено через REST API и gRPC, а в качестве базы данных используется MongoDB.
Реализация на разных облачных платформах
Сервис API Gateway предлагают несколько облачных платформ — и все они предоставляют более-менее схожий пакет услуг. Так в чём же разница?
Azure API Management
Платформа гибридного кросс-облачного управления через API Позволяет в том числе самостоятельное размещение шлюза в своей среде и управление им через API Azure. Мультиклауд — для отважных.
Amazon API Gateway
Amazon API Gateway — пожалуй, самый известный сервис, предназначенный для создания, публикации, обслуживания, мониторинга и обеспечения безопасности API в любых масштабах.
Документация включает подробные инструкции — от развёртывания RESTful API при создании бессерверного веб-приложения до работы с HTTP API, поэтому не придётся искать примеры по всей Сети, чтобы разобраться.
Особенности:
Создание API RESTful при помощи API HTTP или API REST.
Интерфейсы API WebSocket для разработки приложений, которым требуется двусторонняя связь в режиме реального времени.
Частная интеграция с AWS ELB и AWS Cloud Map.
Ключи API для сторонних разработчиков.
Генерирование клиентских SDK на многих языках, включая JavaScript, iOS и Android.
Внедрение подписи четвёртой версии для API REST и API WebSocket при авторизации и проверке запросов API к другим сервисам AWS API Gateway.
Авторизация с помощью AWS Lambda.
Amazon API Gateway можно пользоваться бесплатно целый год — пока ваши потребности не превышают один миллион вызовов API, полученных для API REST, один миллион вызовов API, полученных для API HTTP, и один миллион сообщений и 750 000 минут подключения для API WebSocket в месяц.
Обучение с помощью пошаговых учебных пособий, а также доступ к более чем 500 бесплатным онлайн-курсам.
Oracle API Gateway
Сервис Oracle API Gateway стал доступен любому пользователю в конце 2019 года и уже пытается активно конкурировать с Amazon API Gateway. Получится ли у него отвоевать хотя бы часть аудитории у AWS, нам только предстоит увидеть… а сравнивать всегда интереснее на собственном опыте. Почитать про создание своего API Gateway можно вот в этой статье.
Особенности платформы:
RESTful API в комбинации с Oracle Functions, а также возможностями Kubernetes и Compute.
Каждая служба в облачной инфраструктуре Oracle интегрируется с IAM для аутентификации и авторизации (консоль, SDK или CLI и REST API).
Интеграция с системой управления доступом Oracle Cloud Infrastructure.
Бесплатный период длительностью в тридцать дней, чтобы опробовать возможности широкого спектра сервисов Oracle Cloud, в том числе к Databases, Analytics, Compute, Container Engine for Kubernetes и т. д.
Платформа Oracle Cloud позиционирует себя как более экономичное решение, чем AWS, и в качестве примера упоминает, что соотношение цены и производительности в 2 раза выше, а стоимость исходящей пропускной способности составляет только 1/4 от стоимости у AWS.
Google API Gateway
Сервис перешёл на стадию публичного бета-тестирования 18 сентября 2020 года, так что пока о нём известно довольно мало — и тем интереснее пронаблюдать за его развитием.Сейчас Google API Gateway позволяет управлять API других сервисов облачной платформы — Cloud Functions, Cloud Run, App Enginе, Compute Engine и Google Kubernetes Engine. Настроить работу с Cloud Run, к примеру, можно всего за несколько минут.
Особенности:
Оплачиваются только вызовы к инфраструктурным службам. Стоимость зависит от количества вызовов, а входящий трафик всегда бесплатен.
До 2 миллионов запросов в месяц — бесплатно.
Наличие пробной версии. Google Cloud предоставляет виртуальный кредит в размере 300 долларов, который необходимо потратить в течение последующих трёх месяцев. После окончания бесплатного периода оплата не начинает взиматься автоматически — на платный тариф необходимо перейти вручную.
SberCloud API Gateway
SberCloud API Gateway использует наработки Huawei, а информации об особенностях применении в Сети можно найти немного, но здесь вам поможет Хабр: после недавнего хакатона один из участников рассказал о впечатлениях от SberCloud и сравнил функциональность с более известным AWS.
Особенности:
Доступ к облачным продуктам для физических лиц возможен только с помощью входа/регистрации через Сбер ID.
Управление квотами и регулирование запросов пользователей.
Встроенный инструмент отладки.
Визуализированная панель мониторинга API.
Создание каналов VPC для доступа к бэкенд-сервисам в сети VPC и управления нагрузкой путём отправки API-запросов на различные серверы.
Цифровая подпись, которая вступает в силу только после привязки к API.
Никакой минимальной или предварительной платы — оплачивается только фактическое использование.
Возможность монетизации API.
Yandex API Gateway
23 сентября 2020 года к четырём сервисам платформы Yandex.Cloud прибавились ещё два — Yandex API Gateway и база данных Yandex Database в режиме Serverless.
Yandex API Gateway интегрирован с другими сервисами платформы, благодаря чему возможна отправка HTTP-запросов с помощью функций Yandex Cloud Functions, доступ к статическим данным осуществляется Yandex Object Storage напрямую из хранилища, а запуск произвольных HTTP-сервисов в облаке возможен с помощью Yandex Managed Service for Kubernetes. Так что спектр применения широк — к примеру, внутри облака можно запустить приложение на Express.js.
К слову, до октября 2021 года на бессерверные решения действуют специальные тарифы, которые позволяют создавать и размещать небольшие сайты и сервисы бесплатно.
Особенности:
Наличие расширений для спецификации, которые можно использовать для интеграции с другими облачными платформами.
Поддержка OpenAPI 3.0.
Обработка запросов только по протоколу HTTPS. Сервис автоматически перенаправляет все запросы к API-шлюзам по протоколу HTTP на их HTTPS-версии.
Интеграция с системой управления доменами сервиса Certificate Manager. Для обеспечения TLS-соединения используется привязанный к домену сертификат.
Система квот и лимитов. Максимальный размер спецификации — 3,5 МБ. Количество API-шлюзов в одном облаке — 10, но, в отличие от максимального размера спецификации, меняется по запросу в техническую поддержку.
Тарификация по количеству запросов к созданным API-шлюзам и исходящему трафику. При этом запросы к API-шлюзам до 100 000 запросов в месяц не тарифицируются. Как, кстати, и входящий трафик, а также передача данных между сервисами Yandex.Cloud. Больше подробностей можно узнать в сообществе Serverless в Telegram: Yandex Serverless Ecosystem. Мы регулярно встречаемся в виртуальном пространстве и похоже созревает потребность в очной встрече.