Webhook
Un webhook est une requête HTTP qu'un service envoie automatiquement à une URL que vous lui avez fournie lorsqu'un événement se produit, par exemple un paiement réussi ou un fichier déposé. Au lieu que votre système demande sans cesse si quelque chose a changé (le polling), c'est l'autre système qui vous prévient. La requête transporte une charge utile décrivant l'événement, et votre endpoint répond par un statut de succès pour en accuser réception.
Pourquoi c’est important pour un PM
Les webhooks permettent à un produit d'apprendre des événements qu'il ne maîtrise pas : un abonnement renouvelé chez un prestataire de paiement, un document signé, un message reçu. Ils pilotent des états critiques comme les droits d'accès après un paiement, si bien que leurs modes de défaillance sont des questions produit : quel comportement attendre si un événement arrive deux fois, en retard, dans le désordre, ou jamais ?
Exemple
Quand un client paie, le prestataire de paiement envoie un webhook au serveur du produit. Le serveur vérifie la signature, contrôle que cet identifiant d'événement n'a pas déjà été traité, active l'abonnement et renvoie un statut de succès. Si le serveur est indisponible, le prestataire réessaie plus tard.
Points clés
- Faute de réponse positive, le service émetteur renvoie l'événement : les doublons sont donc normaux.
- Le traitement doit être idempotent : recevoir deux fois le même événement ne doit pas changer le résultat.
- Vérifier la signature de chaque requête permet de rejeter les événements falsifiés.
- Répondre vite et traiter le travail lourd en arrière-plan évite les dépassements de délai.
- Un journal des événements reçus aide à enquêter et à rejouer les échecs.
Erreurs fréquentes
- Ouvrir l'accès sur la redirection qui suit le paiement plutôt que sur l'événement de paiement confirmé.
- Supposer que les événements arrivent toujours dans l'ordre.
- Exposer un endpoint de webhook sans vérification de signature.
Pour aller plus loin dans Module
Les formations et les leçons qui traitent cette notion :