Dieses Projekt bietet eine Reihe von .NET-Tools für die Verwaltung von Abonnements zu Ereignissen, grundlegenden Transformationen und Benachrichtigungen über solche Ereignisvorkommen ( Webhooks ): In einem globalen Entwurfsbereich ermöglicht dieses Modell ereignisgesteuerte Architekturen und löst Systemprozesse nach dem Auftreten erwarteter Ereignisse aus anderen Systemen aus.
Obwohl dieses Integrationsmodell von großen Dienstleistern (wie Sendgrid , Twilio , Github , Slack usw.) weit verbreitet ist, gibt es kein formelles Protokoll oder keine Autorität, die eine Einhaltung durchsetzen würde (wie für andere Fälle wie OpenID, OpenAPI usw.).
Auf jeden Fall besteht eine typische Implementierung aus den folgenden Elementen:
Ich habe versucht, die Konzepte in dieser Seite in diesem Repository ausführlicher auszudrücken (ohne dass beliebig am Ziel ist, pädagogisch zu sein).
Die derzeit vom Framework bereitgestellten Bibliotheken sind Folgendes:
| Bibliothek | Nuget | Github (Prerelease) |
|---|---|---|
| Deveel.Webhooks | ||
| Deveel.Webhooks.Sender | ||
| Deveel.Webhooks.Service | ||
| Deveel.webhooks.mongodb | ||
| Deveel.Webhooks.EntityFramework | ||
| Deveel.webhooks.dynamiclinq | ||
| Deveel.Webhooks.Receiver.aspnetcore |
Die folgenden Bibliotheken erweitern das Framework mit Empfängern für bestimmte Anbieter:
| Bibliothek | Nuget | Github (Prerelease) |
|---|---|---|
| Deveel.Webhooks.Receiver.twilio | ||
| Deveel.Webhooks.Receiver.Sendgrid | ||
| Deveel.Webhooks.Receiver.facebook |
Sie können die stabilen Versionen dieser Bibliotheken aus dem offiziellen Nuget -Kanal erhalten.
Um die neuesten Versionen der Pakete vorab zu erhalten, können Sie vom Deveel-Paket-Manager wiederherstellen.
Wir möchten Ihnen helfen, mit diesem Framework zu beginnen und ihn schließlich zu erweitern: Siehe den Dokumentationsabschnitt oder auf die offizielle Website , die wir für Sie produziert haben.
Der einfachste Weg, um zu beginnen, besteht darin, dem Leitfaden für Erste Schritte zu folgen. Sie können sich jedoch auch auf den häufig gestellten Fragen beziehen, um Antworten auf die häufigsten Fragen zu erhalten.
Während der Arbeiten an einem .NET Core 3.1/.NET 5 PaaS ( Plattform-AS-a-Service ) -Projekt, bei dem die Fähigkeit der Benutzer des Dienstes funktional erforderlich war, System-zu-System-Abonnements und Benachrichtigungen über Ereignisse durch HTTP-Kanal zu erstellen (das wird normalerweise als Webhooks bezeichnet , oder HTTP-Anruf ). solcher Ehrgeiz:
Die Dokumentation des Frameworks liefert Ihnen weitere Informationen zu den Anforderungen, Konfigurationen, Verwendung und Erweiterbarkeit des Frameworks.
Um mit dem Framework zu beginnen, berücksichtigen Sie bitte die folgenden Beispiele, die zeigen, wie Sie einen einfachen Webhook -Management -Dienst erstellen, der Abonnements und Benachrichtigungen und einen Kundenempfänger verarbeitet.
Als Dienstleister bietet diese Bibliothek Funktionen, um die beiden Hauptaspekte des Webhook -Musters zu verarbeiten:
Das folgende Beispiel zeigt, wie Sie ein Webhook -Abonnement erstellen und wie Sie eine Benachrichtigung an die Abonnentenendpunkte senden:
using Microsoft . AspNetCore . Builder ;
using Deveel . Webhooks ;
namespace Example {
public class Program {
public static void Main ( string [ ] args ) {
var builder = WebApplication . CreateBuilder ( args ) ;
// ...
builder . Services . AddWebhookSubscriptions < MongoWebhookSubscription > ( subs => {
subs . UseMongoDb ( "mongodb://localhost:27017" )
. UseSubscriptionResolver ( ) ;
} ) ;
builder . Services . AddWebhookNotifier < MyWebhook > ( notifier => {
notifier . UseSender ( sender => {
sender . Configure ( options => {
options . Timeout = TimeSpan . FromSeconds ( 30 ) ;
} ) ;
} ) ;
} ) ;
var app = builder . Build ( ) ;
// ...
// ... and notify the receivers manually ...
app . MapPost ( "/webhooks" , async ( HttpContext context ,
[ FromServices ] IWebhookSender < MyWebhook > sender , [ FromBody ] MyWebhookModel webhook ) => {
var destination = webhook . Destination . ToWebhookDestination ( ) ;
var result = await sender . SendAsync ( destination , webhook , context . HttpContext . RequestAborted ) ;
// ...
return Results . Ok ( ) ;
} ) ;
// ... or notify the webhooks automatically from subscriptions
app . MapPost ( "/webhooks/notify" , async ( HttpContext context ,
[ FromServices ] IWebhookNotifier < MyWebhook > notifier , [ FromBody ] MyEventModel eventModel ) => {
var eventInfo = eventModel . AsEventInfo ( ) ;
var result = await notifier . NotifyAsync ( eventInfo , context . HttpContext . RequestAborted ) ;
// you can log the result of the notification to all receivers ...
return Results . Ok ( ) ;
} ) ;
app . Run ( ) ;
}
}
} Das Framework bietet auch eine Reihe integrierter Empfänger, mit denen die eingehenden Benachrichtigungen aus den abonnierten Endpunkten in Ihrer Anwendung verarbeitet werden können.
Das folgende Beispiel zeigt, wie Sie einen Empfänger für einen Webhook erstellen, der durch eine Facebook -Messenger -Nachricht unterstützt wird:
namespace Example {
public class Program {
public static void Main ( string [ ] args ) {
var builder = WebApplication . CreateBuilder ( args ) ;
// ...
builder . Services . AddFacebookReceiver ( )
. AddHandler < MyFacebookWebhookHandler > ( ) ;
var app = builder . Build ( ) ;
// ...
// ... you can handle all the incoming webhooks at "/webhooks/facebook"
// invoking all the handlers registered in the service collection ...
app . MapFacebookWebhook ( "/webhooks/facebook" ) ;
// ... or you can handle the incoming webhooks manually ...
app . MapFacebookWebhook ( "/webhooks/facebook2" , async ( FacebookWebhook webhook , IService service , CancellationToken ct ) => {
// ...
await service . DoSomethingAsync ( webhook , ct ) ;
} ) ;
app . Run ( ) ;
}
}
} Beiträge zu Open-Source-Projekten wie Deveel Webhooks werden im Allgemeinen von Interesse an der Nutzung des Produkts und der Dienstleistungen angetrieben, wenn sie einige der Erwartungen, die wir für ihre Funktionen haben, respektieren würden.
Die besten Möglichkeiten, die Qualität dieses Projekts beizutragen und zu verbessern, besteht darin, es auszuprobieren, Probleme einzureichen, Designgespräche zu beitreten und Ziehrequests zu machen.
Weitere Informationen zu diesem Projekt finden Sie in den beitragenden Richtlinien, um weitere Informationen darüber zu erhalten, wie Sie zu diesem Projekt beitragen können.
Wir wollen die meisten Fragen beantworten, die Sie möglicherweise haben, indem wir Dokumentationen bereitstellen, häufig gestellte Fragen beantworten und Probleme wie Fehlerberichte und Feature -Anfragen verfolgen.
Dieses Projekt wird im Rahmen des Open-Source-Lizenzvertrags von Apache 2 veröffentlicht.