API Gateway: REST vs HTTP vs WebSocket
- ⬜⚡ Lambda profundo: cold start, layers e provisioned concurrency(AWS Developer Associate (DVA-C02))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
HTTP API vs REST API
| Feature | HTTP API | REST API |
|---|---|---|
| Preço | ~$1/M requests | ~$3.50/M requests |
| Latência | ~30% menor | Maior |
| Authorizer | JWT, Lambda | Cognito, Lambda, IAM |
| WAF integration | Não | Sim |
| API keys + usage plans | Não | Sim |
| Request validation | Limitada | Completa |
| Private APIs (VPC) | Não | Sim |
| Mapping templates | Não | Sim (VTL) |
- → REST simples
- → precisa de API key ou cache
- → conexão persistente
- → consulta antes
- → por rota
- → grava connectionId
- → envia de volta ao cliente
- → proxy
- Fora da AWS
- Rede e entrega
- Banco de dados
- Compute
Comece pela HTTP API e só suba para REST quando precisar de API key, cache de estágio, transformação ou WAF. WebSocket é outro eixo: existe quando o servidor precisa iniciar a conversa.
- HTTP API é o padrão para API nova. Mais barata, menor latência, e cobre o essencial: JWT authorizer, CORS, roteamento e proxy. Se a questão não pedir nada exótico, é ela. "Menor custo" quase sempre aponta para cá.
- REST API pelas features que só ela tem. API key com usage plan (para cotar cliente terceiro), cache no estágio, transformação de requisição/resposta, WAF e endpoint privado. Cada uma dessas na questão elimina a HTTP API.
- WebSocket quando o servidor precisa falar primeiro. Chat, notificação, painel ao vivo. Três rotas nativas — $connect, $disconnect e as suas — e cada uma pode invocar uma Lambda diferente.
- WebSocket exige guardar o connectionId. Para o backend enviar mensagem depois, ele precisa saber para quem. O padrão é gravar o connectionId numa tabela DynamoDB no $connect e apagar no $disconnect. Sem isso não há como fazer push.
- Cache é decisão de custo e de frescor. O cache do estágio da REST API reduz invocação de Lambda e latência, mas serve resposta velha dentro do TTL. Endpoint que devolve dado por usuário precisa de chave de cache adequada — ou um cliente vê o dado do outro.
# HTTP API: menos recursos, ~70% mais barata, latência menor.
# Escolha o padrão quando você só precisa de rota, JWT e proxy.
MinhaHttpApi:
Type: AWS::Serverless::HttpApi
Properties:
Auth:
Authorizers:
JwtAuth: # JWT nativo — sem Lambda authorizer
IdentitySource: $request.header.Authorization
JwtConfiguration:
issuer: https://cognito-idp.us-east-1.amazonaws.com/us-east-1_ABC
audience: [ minha-app ]
DefaultAuthorizer: JwtAuth
# REST API: escolha quando precisar de algo desta lista — é ela que decide.
MinhaRestApi:
Type: AWS::Serverless::Api
Properties:
# Nenhum destes existe na HTTP API. Se o requisito cita um, a resposta é REST:
ApiKeySourceType: HEADER # chave de API e plano de uso
MinimumCompressionSize: 1024 # compressão de resposta
EndpointConfiguration:
Type: PRIVATE # endpoint privado, só via VPC endpoint
# ...além de: cache de resposta, validação de requisição, WAF e AWS X-Ray
# de ponta a ponta com integração não-proxy.Onde isso entra no exame
O exame testa a escolha entre REST, HTTP e WebSocket API por requisito, não por preço. Reconheça pelas palavras-chave: "request validation", "API keys" ou "WAF" apontam para REST; "menor custo e latência" com "JWT nativo" aponta para HTTP; "o servidor precisa enviar mensagem ao cliente" só WebSocket resolve.
Uma API precisa expor cota mensal por cliente parceiro, com chave de acesso rastreável. Qual tipo de API Gateway?
WebSocket API
Conexões persistentes pra chat, multiplayer, real-time. Cada connection tem um connectionId. Lambda recebe events: $connect, $disconnect, $default (ou routes custom). Usa Management API pra mandar mensagem pra conexão específica: POST /@connections/{connectionId}.
Alternativas: AppSync (GraphQL sub), IoT Core (MQTT), ALB (sticky). WebSocket API é bom pra baixa complexidade; chat real-time em escala massiva considere Redis pubsub + Fargate.
Perguntas frequentes
❓ API HTTP ou REST: qual escolher?
❓ Como proteger uma API contra uso excessivo?
❓ Quando usar API de conexão persistente?
Fixando
Numa WebSocket API, como o backend envia mensagem para um cliente específico depois que a conexão já foi estabelecida?
Qual é o efeito de habilitar cache no estágio de uma REST API?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…