REST API, HTTP API и WebSocket API
Разберитесь в компромиссах между REST API с широкими возможностями, HTTP API с низкими задержкой и стоимостью и двунаправленным WebSocket API и выберите подходящий вариант.
«REST API, HTTP API и WebSocket API» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Зачем нужен API Gateway
Amazon API Gateway — это полностью управляемый сервис, позволяющий создавать, публиковать, защищать и контролировать API при любом масштабе. Он служит входной точкой для серверных сервисов: функций Lambda, экземпляров EC2, HTTP-серверов или любого сервиса AWS. API Gateway берёт на себя управление трафиком, авторизацию, ограничение скорости, мониторинг и управление версиями API, поэтому серверная часть может сосредоточиться на бизнес-логике, а не на инфраструктурных аспектах API.
REST API: традиционный API с широкими возможностями
REST API (исходный продукт API Gateway) предоставляет самый широкий набор возможностей: преобразование запроса и ответа с помощью шаблонов сопоставления, ограничение скорости для каждого метода, планы использования с ключами API, кэширование ответов, интеграцию с WAF, трассировку X-Ray, политики ресурсов и взаимный TLS с сертификатами клиентов. REST API поддерживает все типы интеграции: Lambda, HTTP, сервис AWS, Mock и Lambda Proxy. Используйте REST API, когда нужны расширенные возможности, такие как преобразование, кэширование или планы использования.
HTTP API: недорогая альтернатива с малой задержкой
HTTP API был разработан как более простой, дешёвый и быстрый вариант REST API. Он поддерживает только интеграции Lambda proxy и HTTP proxy — без интеграций с сервисами AWS и без Mock. Основные преимущества: стоимость до на 70% ниже, чем у REST API, меньшая задержка, встроенная авторизация JWT для OIDC и OAuth 2.0 (для распространённых сценариев авторизации не требуется авторизатор Lambda) и автоматическое развёртывание. Если Вам не нужны кэширование, планы использования или преобразование запросов и ответов, HTTP API будет лучшим выбором.
# Create a simple HTTP API
aws apigatewayv2 create-api \
--name 'MyHttpAPI' \
--protocol-type HTTP \
--target 'arn:aws:lambda:us-east-1:123456789012:function:MyLambda'WebSocket API: двусторонняя связь в реальном времени
WebSocket API поддерживает постоянные двусторонние соединения между клиентами и сервером. В отличие от HTTP (модель «запрос — ответ»), WebSocket позволяет серверу в любой момент отправлять сообщения подключённым клиентам, не дожидаясь опроса со стороны клиента. API Gateway управляет WebSocket-соединениями и направляет сообщения функциям Lambda на основе выражений маршрутов. Используйте WebSocket API для приложений реального времени: чатов, интерактивных панелей, совместного редактирования, игр и биржевых котировок.
Маршруты WebSocket и управление соединениями
У WebSocket API есть три встроенных маршрута: $connect (срабатывает, когда клиент открывает соединение), $disconnect (срабатывает, когда соединение закрывается) и $default (перехватывает сообщения без соответствующего маршрута). Вы можете добавлять пользовательские маршруты, например sendmessage, сопоставленные с определёнными функциями Lambda. Используйте API управления @connections, чтобы из функции Lambda отправлять сообщения подключённым клиентам, применяя идентификатор соединения клиента.
# Send a message to a specific WebSocket client from Lambda
import boto3
gw_client = boto3.client(
'apigatewaymanagementapi',
endpoint_url='https://abc123.execute-api.us-east-1.amazonaws.com/prod'
)
def lambda_handler(event, context):
connection_id = event['requestContext']['connectionId']
gw_client.post_to_connection(
Data='{"type": "message", "text": "Hello!"}',
ConnectionId=connection_id
)Сравнение возможностей: REST, HTTP и WebSocket
Основные различия вкратце:
- REST API: полный набор возможностей (кэширование, планы использования, преобразования, WAF), более высокая стоимость, поддержка всех типов интеграции
- HTTP API: только прокси Lambda/HTTP, на 70% дешевле, встроенная аутентификация JWT, меньшая задержка, без кэширования и планов использования
- WebSocket API: постоянные двусторонние соединения, возможность отправки данных сервером, тарификация за каждый миллион сообщений и минуту времени соединения
Для экзамена SAA-C03: вопросы об HTTP без функций реального времени и расширенных возможностей → HTTP API. Отправка данных в реальном времени → WebSocket. Сложные возможности API → REST API.
Этапы и развёртывания
API API Gateway развёртываются в этапы (например, dev, staging, prod). У каждого этапа есть собственный URL, настройки ограничения скорости, а также возможность ссылаться на конкретный снимок развёртывания. Используйте переменные этапа (аналог переменных среды), чтобы задавать конечные точки серверной части отдельно для каждого этапа: например, направить этап dev на псевдоним Lambda для разработки, а prod — на рабочий псевдоним, не дублируя конфигурацию API.
# REST API: create a deployment and stage
aws apigateway create-deployment \
--rest-api-id 'abc123' \
--stage-name 'prod'
# Set stage variable
aws apigateway update-stage \
--rest-api-id 'abc123' \
--stage-name 'prod' \
--patch-operations 'op=replace,path=/variables/lambdaAlias,value=prod'Пользовательские доменные имена и сопоставления базовых путей
По умолчанию URL API Gateway содержат идентификатор API (например, abc123.execute-api.us-east-1.amazonaws.com). Для рабочей среды создайте пользовательское доменное имя, защищённое сертификатом ACM, и сопоставьте его с API и этапом. Используйте сопоставления базовых путей, чтобы размещать несколько API в одном домене (например, api.example.com/orders → API заказов, api.example.com/users → API пользователей). Для пользовательских доменных имён требуется запись-алиас Route 53, указывающая на конечную точку API Gateway.
Пограничные, региональные и частные API
REST API можно развёртывать с одним из трёх типов конечных точек: оптимизированная для периферии (интерфейс CloudFront для глобального распространения, используется по умолчанию), региональная (без CloudFront, с меньшей задержкой для клиентов в том же регионе или при добавлении собственного CloudFront) и частная (доступна только из Вашего VPC через интерфейсную конечную точку VPC, для внутренних микросервисов). HTTP API поддерживает оптимизированные для периферии и региональные конечные точки. WebSocket API поддерживает региональные и частные конечные точки. Выбирайте региональный тип для API, используемых из того же региона, или при использовании собственных дистрибутивов CloudFront.
Канареечные развёртывания с API Gateway
REST API API Gateway поддерживает канареечные развёртывания на этапе. Вы можете направить определённый процент трафика на канареечное развёртывание (новую версию), а остальной трафик — на рабочее развёртывание. Отслеживайте частоту ошибок и задержку канареечного варианта; если он работает стабильно, увеличьте его долю до 100%. При возникновении проблем выполните откат, установив вес канареечного варианта равным 0. Это аналогично взвешенной маршрутизации псевдонимов Lambda и позволяет безопасно и постепенно обновлять API без переключения между средами blue/green.
Выбор подходящего типа API для экзамена
Ключевые слова в вопросах экзамена SAA-C03 для определения типа API: «экономичный простой API» → HTTP API; «двусторонняя связь в реальном времени», «отправка данных сервером» или «чат» → WebSocket API; «преобразование запроса», «планы использования», «ограничение скорости по ключу API», «кэширование ответа» → REST API. Если в вопросе требуется просто «предоставить Lambda как HTTP-конечную точку с низкой стоимостью», лучшим выбором будет HTTP API. Если вопрос касается сложных возможностей управления API или партнёров, обычно правильным ответом будет REST API.
Быстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03), рассмотренных в этом уроке.
Итоги урока
В этом уроке Вы узнали, что REST API предоставляет полный набор возможностей API Gateway (кэширование, преобразования, планы использования, WAF) по более высокой цене; HTTP API на 70% дешевле, имеет встроенную аутентификацию JWT и меньшую задержку и идеально подходит для сценариев с прокси Lambda/HTTP без расширенных возможностей; а WebSocket API обеспечивает отправку данных сервером в реальном времени через постоянные соединения для чатов, игр и приложений с оперативными данными. Далее мы рассмотрим интеграции API Gateway с Lambda, HTTP-серверными частями и имитацией ответов.
Часто задаваемые вопросы
Урок «REST API, HTTP API и WebSocket API» бесплатный?
Да — полный текст урока «REST API, HTTP API и WebSocket API» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «REST API, HTTP API и WebSocket API»?
Разберитесь в компромиссах между REST API с широкими возможностями, HTTP API с низкими задержкой и стоимостью и двунаправленным WebSocket API и выберите подходящий вариант. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «REST API, HTTP API и WebSocket API»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- REST API, HTTP API и WebSocket API
- Интеграции: Lambda, HTTP и имитация
- Авторизация: IAM, авторизаторы Lambda и Cognito
- Ограничение частоты, кэширование и планы использования