Übersicht über ASP.NET WebHooks

WebHooks ist ein einfaches HTTP-Muster, das ein einfaches Pub/Sub-Modell für die Verkabelung von Web-APIs und SaaS-Diensten bereitstellt. Wenn ein Ereignis in einem Dienst auftritt, wird eine Benachrichtigung in Form einer HTTP POST-Anforderung an registrierte Abonnenten gesendet. Die POST-Anforderung enthält Informationen über das Ereignis, die es dem Empfänger ermöglichen, entsprechend zu handeln.

Aufgrund ihrer Einfachheit werden WebHooks bereits von einer vielzahl von Diensten verfügbar gemacht, darunter Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Slack, Stripe, Trello und viele mehr. Beispielsweise kann ein WebHook angeben, dass eine Datei in Dropbox geändert wurde, oder dass eine Codeänderung in GitHub committet wurde, oder dass eine Zahlung in PayPal initiiert oder ein Karte in Trello erstellt wurde. Die Möglichkeiten sind endlos!

Microsoft ASP.NET WebHooks erleichtert das Senden und Empfangen von WebHooks als Teil Ihrer ASP.NET-Anwendung:

  • Auf der Empfangenden Seite stellt es ein allgemeines Modell für den Empfang und die Verarbeitung von WebHooks von einer beliebigen Anzahl von WebHook-Anbietern bereit. Es ist sofort verfügbar mit Unterstützung für Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello, WordPress und Zendesk , aber es ist einfach, Unterstützung für mehr hinzuzufügen.

  • Auf der Seite des Sendens bietet es Unterstützung für die Verwaltung und Speicherung von Abonnements sowie für das Senden von Ereignisbenachrichtigungen an die richtigen Abonnenten. Auf diese Weise können Sie Ihren eigenen Satz von Ereignissen definieren, die Abonnenten abonnieren können, und sie benachrichtigen, wenn Etwas passiert.

Die beiden Teile können je nach Szenario zusammen oder getrennt verwendet werden. Wenn Sie nur WebHooks von anderen Diensten empfangen müssen, können Sie nur den Empfängerteil verwenden. Wenn Sie WebHooks nur für andere Benutzer verfügbar machen möchten, können Sie genau dies tun.

Der Code zielt auf ASP.NET-Web-API 2 und ASP.NET MVC 5 ab und ist als OSS auf GitHub verfügbar.

Übersicht über Webhooks

WebHooks ist ein Muster, das bedeutet, dass es von Dienst zu Dienst variiert, aber die Grundidee ist identisch. Sie können sich WebHooks als ein einfaches Pub/Sub-Modell vorstellen, bei dem ein Benutzer Ereignisse abonnieren kann, die an anderer Stelle stattfinden. Die Ereignisbenachrichtigungen werden als HTTP POST-Anforderungen weitergegeben, die Informationen über das Ereignis selbst enthalten.

In der Regel enthält die HTTP POST-Anforderung ein JSON-Objekt oder HTML-Formulardaten, die vom WebHook-Absender bestimmt werden, einschließlich Informationen zu dem Ereignis, das den WebHook auslöst. Ein WebHook POST-Anforderungstext von GitHub sieht beispielsweise wie folgt aus, weil ein neues Problem in einem bestimmten Repository geöffnet wird:

{
  "action": "opened",
  "issue": {
      "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
      "number": 1347,
      ...
  },
  "repository": {
      "id": 1296269,
      "full_name": "octocat/Hello-World",
      "owner": {
          "login": "octocat",
          "id": 1
          ...
      },
      ...
  },
  "sender": {
      "login": "octocat",
      "id": 1,
      ...
  }
}

Um sicherzustellen, dass der WebHook tatsächlich vom beabsichtigten Absender stammt, wird die POST-Anforderung in irgendeiner Weise gesichert und dann vom Empfänger überprüft. GitHub WebHooks enthält beispielsweise einen X-Hub-Signature-HTTP-Header mit einem Hash des Anforderungstexts, der von der Empfängerimplementierung überprüft wird, sodass Sie sich keine Gedanken darüber machen müssen.

Der WebHook-Flow läuft in der Regel wie folgt ab:

  • Der WebHook-Absender macht Ereignisse verfügbar, die ein Client abonnieren kann. Die Ereignisse beschreiben beobachtbare Änderungen am System, z. B. dass ein neues Datenelement eingefügt wurde, dass ein Prozess abgeschlossen wurde oder etwas anderes.

  • Der WebHook-Empfänger abonniert, indem er einen WebHook registriert, der aus vier Dingen besteht:

    1. Ein URI für den Ort, an dem die Ereignisbenachrichtigung in Form einer HTTP POST-Anforderung gepostet werden soll;

    2. Eine Reihe von Filtern, die die spezifischen Ereignisse beschreiben, für die der WebHook ausgelöst werden soll;

    3. Ein geheimer Schlüssel, der zum Signieren der HTTP POST-Anforderung verwendet wird;

    4. Zusätzliche Daten, die in die HTTP POST-Anforderung aufgenommen werden sollen. Dies können z. B. zusätzliche HTTP-Headerfelder oder Eigenschaften sein, die im HTTP POST-Anforderungstext enthalten sind.

  • Sobald ein Ereignis eintritt, werden die übereinstimmenden WebHook-Registrierungen gefunden und HTTP POST-Anforderungen gesendet. In der Regel wird die Generierung der HTTP POST-Anforderungen mehrmals wiederholt, wenn der Empfänger aus irgendeinem Grund nicht antwortet oder die HTTP POST-Anforderung zu einer Fehlerantwort führt.

WebHooks-Verarbeitungspipeline

Die Microsoft ASP.NET WebHooks-Verarbeitungspipeline für eingehende WebHooks sieht wie folgt aus:

ASP.NET WebHooks-Verarbeitungspipeline

Die beiden wichtigsten Konzepte sind hier Empfänger und Handler:

  • Empfänger sind dafür verantwortlich, die bestimmte Art von WebHook von einem bestimmten Absender zu behandeln und Sicherheitsüberprüfungen zu erzwingen, um sicherzustellen, dass die WebHook-Anforderung tatsächlich vom beabsichtigten Absender stammt.

  • Handler sind in der Regel der Ort, an dem Benutzercode ausgeführt wird, der den jeweiligen WebHook verarbeitet.

In den folgenden Knoten werden diese Konzepte ausführlicher beschrieben.