該項目提供了一組.NET工具,用於管理事件,基本轉換和此類事件事件的通知( Webhooks ):在全球設計範圍內,該模型啟用了事件驅動的架構,並在其他系統發生預期的發生時觸發系統過程。
儘管此集成模型被主要服務提供商(例如SendGrid , Twilio , Github , Slack等)廣泛採用,但沒有正式的協議或權限可以執行合規性(例如對於其他情況,例如OpenID,OpenAPI等)。
無論如何,典型的實現包括以下元素:
我試圖在此資料庫中的此頁面中更詳細地表達這些概念(沒有任何教學的野心)。
框架當前提供的庫如下:
| 圖書館 | nuget | github(預發行) |
|---|---|---|
| deveel.webhooks | ||
| deveel.webhooks.sender | ||
| deveel.webhooks.service | ||
| deveel.webhooks.mongodb | ||
| deveel.webhooks.entityframework | ||
| deveel.webhooks.dynamiclinq | ||
| deveel.webhooks.receiver.aspnetcore |
以下庫將框架擴展到特定提供者的接收器:
| 圖書館 | nuget | github(預發行) |
|---|---|---|
| deveel.webhooks.receiver.twilio | ||
| deveel.webhooks.receiver.sendgrid | ||
| deveel.webhooks.receiver.facebook |
您可以從Nuget官方頻道獲得這些庫的穩定版本。
要獲取可以從Deveel軟件包管理器還原的包裝的最新釋放版本。
我們想幫助您開始此框架並最終將其擴展:請參考文檔部分或我們為您製作的官方網站。
最簡單的入門方法是遵循“入門指南”,但您還可以參考常見問題部分,以獲取最常見問題的答案。
在從事.NET Core 3.1/.NET 5 PAA (平台-As-Service )項目的同時,該項目需要功能,該服務的用戶能夠能夠通過HTTP渠道創建系統到系統到系統的訂閱和事件的通知(通常是命名的Webhooks ,或HTTP PARKENT ),以避免我的設計,但我避免了我的設計,以避免我的設計,以避免使用該練習。在這種野心中感到沮喪:
該框架的文檔將為您提供有關框架的要求,配置,使用和可擴展性的更多詳細信息。
無論如何,為了幫助您開始框架,請考慮以下示例,這些示例顯示瞭如何創建簡單的Webhook管理服務,處理訂閱和通知以及客戶端接收器。
作為服務提供商,該庫提供了處理Webhook模式的兩個主要方面的功能:
以下示例顯示瞭如何創建Webhook訂閱,以及如何將通知發送到訂戶端點:
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 ( ) ;
}
}
} 該框架還提供了一組內置的接收器,可用於從應用程序中的訂閱端點處理傳入通知。
以下示例顯示瞭如何為由Facebook Messenger消息支持的Webhook創建接收器:
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 ( ) ;
}
}
} 如果他們尊重我們對其功能的某些期望,那麼對使用Deveel Webhooks等開源項目的貢獻通常受到使用產品和服務的興趣。
貢獻和提高該項目質量的最佳方法是嘗試,提交問題,加入設計對話以及進行拉裝。
請參考貢獻指南,以獲取有關如何為該項目貢獻的更多詳細信息。
我們旨在通過提供文檔,回答常見問題並跟進錯誤報告和功能請求等問題來解決您可能遇到的大多數問題。
該項目根據Apache 2開源許可協議發布。