Le débogage webhook local doit être rapide, reproductible et proche de la production. Pourtant, beaucoup d'équipes déploient encore en staging pour savoir si le callback est arrivé, si le payload est valide et si la signature passe.
Le problème du test webhook uniquement en staging
Workflow habituel : déployer, configurer l'endpoint, déclencher, lire les logs, corriger, redéployer. Chaque cycle coûte du temps et ajoute du bruit.
Pour valider la logique handler, l'idempotence ou le parsing, cette surcharge est inutile. Il faut déboguer les webhooks en local avec contrôle total de la stack dev.
Ce qu'il faut pour tester les webhooks sur localhost
- Une app locale avec routes webhook actives.
- Un endpoint HTTPS public mappé à cette app.
- Visibilité sur en-têtes, corps, statut et latence.
C'est ce que le tunneling localhost apporte : un pont sécurisé des services externes vers votre processus local.
Étapes : déboguer les webhooks avec PortPreview
- Lancez votre app localement.
- Exécutez
npx portpreview 3000. - Collez l'URL HTTPS dans le dashboard provider (Stripe, GitHub, Twilio…).
- Déclenchez des événements test et inspectez chaque callback.
- Rejouez les requêtes capturées pour valider vos correctifs.
Bonnes pratiques
Validez les signatures en local. Ne contournez pas la sécurité ; testez le même chemin qu'en production.
Simulez retries et doublons. Les providers peuvent livrer le même événement plusieurs fois.
Réduisez les déploiements staging. Itérez en local, puis validez en staging avant release.
Comparez les outils dans notre guide alternative à ngrok. Rejoignez la waitlist PortPreview.
Checklist webhook par provider
Stripe
Vérifiez routing par type d'événement, clés d'idempotence et validation signature. Voir test webhook Stripe en local.
GitHub
Validez en-têtes de livraison, filtres d'événements et chemins d'autorisation. Voir test webhook GitHub en local.
Twilio
Inspectez payloads form-encoded et timing de réponse. Voir test webhook Twilio en local.
Pour les retries, utilisez rejeu webhook et comparez PortPreview vs localtunnel.
