Pitch: O problema de testar webhooks em localhost (e como eu resolvi)
Por que testar webhooks em desenvolvimento ainda é tão ruim?
Webhooks são simples em teoria: um serviço envia um POST pra sua URL quando algo acontece. Na prática, o workflow de desenvolvimento com webhooks é cheio de atrito.
Os problemas reais
1. Localhost não é acessível
Seu servidor roda em localhost:3000. O Stripe precisa de uma URL pública. Solução mais comum: ngrok. Funciona, mas a URL muda a cada sessão (no free) e você precisa reconfigurar o endpoint toda vez.
2. Sem replay
O webhook chegou, seu código tinha um bug, o request se perdeu. Agora você precisa ir no dashboard do Stripe e re-disparar o evento. Se for GitHub, precisa fazer outro push. Se for Mercado Pago, precisa simular outra compra.
3. Sem histórico
Fechou o terminal do ngrok? Perdeu tudo. O webhook que chegou ontem com aquele edge case estranho? Sumiu.
4. Configuração repetitiva
Cada vez que abre o ambiente de dev, o ritual: abre ngrok → copia URL → vai no dashboard do serviço → cola → testa. Todo dia.
Como as ferramentas atuais resolvem (ou não)
- ngrok: resolve o forward, mas sem replay, sem histórico, URL temporária
- webhook.site / RequestBin: capturam e mostram o payload, mas não encaminham pro localhost
- Nenhuma faz replay automático
A abordagem que eu segui
Eu trabalhava com várias integrações simultâneas (Stripe, Mercado Pago, GitHub) e esse atrito me custava tempo toda semana. Então construí o HookScope com foco em resolver esses 4 problemas:
- URL permanente por endpoint
- Histórico completo dos webhooks
- Replay com 1 clique
- Forward pro localhost via CLI (SignalR) ou dashboard
# Forward direto pro localhost
hookscope listen meu-endpoint --to http://localhost:3000
Tem plano free sem limite de tempo. Quem quiser testar: hookscope.app/register
Escrevi um comparativo mais completo aqui.
Curioso pra saber: como vocês resolvem isso no dia a dia? Alguém tem um setup diferente?
Fonte: https://hookscope.com.br
