Em poucas palavras
APIs orientadas a eventos utilizam webhooks para notificações externas e filas de mensagens para processamento interno. Publique eventos em uma fila (RabbitMQ, Kafka), processe assincronamente e notifique os clientes via webhooks. A Modern PetstoreAPI utiliza este padrão para processamento de pedidos, atualizações de estoque e notificações de pagamento.
Introdução
Um cliente faz um pedido. Sua API precisa cobrar o pagamento, atualizar o estoque, enviar um e-mail, notificar o depósito e disparar webhooks. Você faz tudo isso de forma síncrona, fazendo o cliente esperar 10 segundos? Ou responde imediatamente e processa assincronamente?
APIs orientadas a eventos respondem rapidamente e processam em segundo plano. O endpoint de pedido retorna 201 Created imediatamente. Eventos disparam o processamento em segundo plano. Webhooks notificam os clientes quando concluído.
A Modern PetstoreAPI utiliza arquitetura orientada a eventos para pedidos, pagamentos e estoque.
Apidog ajuda você a testar webhooks, validar fluxos de eventos e simular processamento assíncrono.
Arquitetura Orientada a Eventos
APIs orientadas a eventos publicam eventos quando algo acontece. Outros serviços assinam e reagem.
Componentes
- Produtor de Eventos - Endpoint da API que publica eventos
- Barramento/Fila de Eventos - Roteia eventos (RabbitMQ, Kafka, SQS)
- Consumidor de Eventos - Workers em segundo plano que processam eventos
- Webhooks - Notificam clientes externos
Fluxo
Client → POST /orders → API
API → Publish "order.created" → Queue
API → Return 201 Created → Client
Worker → Consume event → Process order
Worker → Publish "order.completed" → Queue
Webhook Worker → Send webhook → Client
Webhooks para Eventos Externos
Webhooks notificam clientes externos sobre eventos.
// Publica evento quando o pedido é criado
app.post('/v1/orders', async (req, res) => {
const order = await createOrder(req.body);
await eventBus.publish('order.created', {
orderId: order.id,
userId: order.userId,
total: order.total
});
res.status(201).json(order);
});
// Worker em segundo plano envia webhooks
eventBus.subscribe('order.completed', async (event) => {
const webhooks = await getWebhooks(event.userId, 'order.completed');
for (const webhook of webhooks) {
await sendWebhook(webhook.url, {
event: 'order.completed',
data: event
});
}
});
Filas de Mensagens para Eventos Internos
Filas de mensagens lidam com o processamento interno de eventos.
Exemplo de RabbitMQ
// Publicador
await publishEvent('order.created', { orderId: '019b4132' });
// Consumidor
await consumeEvents('order.*', async (event) => {
await processOrder(event);
});
Como a Modern PetstoreAPI Implementa APIs Orientadas a Eventos
Processamento de Pedidos
- POST /orders retorna 201 imediatamente
- Publica o evento order.created
- Worker de pagamento processa o pagamento
- Worker de estoque atualiza o estoque
- Worker de e-mail envia a confirmação
- Worker de webhook notifica o cliente
Veja a arquitetura de eventos da Modern PetstoreAPI.
Testando com Apidog
Apidog suporta testes de API orientadas a eventos:
- Testar entrega de webhook
- Validar payloads de eventos
- Simular processamento assíncrono
- Testar lógica de retentativa
Conclusão
APIs orientadas a eventos melhoram o desempenho e a escalabilidade. Use webhooks para notificações externas e filas de mensagens para processamento interno. A Modern PetstoreAPI demonstra padrões orientados a eventos prontos para produção.
Perguntas Frequentes
Qual a diferença entre webhooks e filas de mensagens?
Webhooks notificam clientes externos via HTTP. Filas de mensagens lidam com a comunicação interna entre serviços.
Qual fila de mensagens devo usar?
RabbitMQ para simplicidade, Kafka para alto throughput, AWS SQS para serviço gerenciado.
Como você lida com falhas de webhook?
Implemente lógica de retentativa com backoff exponencial (consulte nosso guia de confiabilidade de webhooks).
É possível usar eventos sem filas de mensagens?
Sim, mas as filas fornecem durabilidade, retentativa e desacoplamento.
Como você testa APIs orientadas a eventos?
Use Apidog para testar webhooks e validar fluxos de eventos.
