Proyek ini menyediakan serangkaian alat .NET untuk pengelolaan langganan ke acara, transformasi dasar dan pemberitahuan kejadian peristiwa tersebut ( Webhooks ): Dalam ruang lingkup desain global, model ini memungkinkan arsitektur yang didorong oleh peristiwa, memicu proses sistem pada terjadinya kejadian yang diharapkan dari sistem lain.
Meskipun model integrasi ini secara luas diadopsi oleh penyedia layanan utama (seperti Sendgrid , Twilio , GitHub , Slack , dll.), Tidak ada protokol formal atau otoritas yang akan menegakkan kepatuhan (seperti untuk kasus lain, seperti OpenID, OpenAPI, dll.).
Bagaimanapun, implementasi khas terdiri dari elemen -elemen berikut:
Saya mencoba mengekspresikan konsep secara lebih rinci di halaman ini dalam repositori ini (tanpa ambisi untuk menjadi pedagogi).
Perpustakaan yang saat ini disediakan oleh kerangka kerja adalah sebagai berikut:
| Perpustakaan | Nuget | GitHub (prerelease) |
|---|---|---|
| Deveel.webhooks | ||
| Deveel.webhooks.sender | ||
| Deveel.webhooks.service | ||
| Deveel.webhooks.mongodb | ||
| Deveel.webhooks.entityframework | ||
| Deveel.webhooks.dynamiclinq | ||
| Deveel.webhooks.receiver.aspnetcore |
Perpustakaan berikut memperluas kerangka kerja dengan penerima untuk penyedia tertentu:
| Perpustakaan | Nuget | GitHub (prerelease) |
|---|---|---|
| Deveel.webhooks.receiver.twilio | ||
| Deveel.webhooks.receiver.sendgrid | ||
| Deveel.webhooks.receiver.facebook |
Anda dapat memperoleh versi stabil dari perpustakaan ini dari saluran resmi Nuget.
Untuk mendapatkan versi pra-rilis terbaru dari paket yang dapat Anda kembalikan dari manajer paket Deveel.
Kami ingin membantu Anda memulai dengan kerangka kerja ini dan akhirnya memperpanjangnya: silakan merujuk ke bagian dokumentasi , atau ke situs web resmi yang telah kami hasilkan untuk Anda.
Cara termudah untuk memulai adalah dengan mengikuti panduan memulai , tetapi Anda juga dapat merujuk pada bagian pertanyaan yang sering diajukan untuk mendapatkan jawaban atas pertanyaan yang paling umum.
While working on a .NET Core 3.1/.NET 5 PaaS ( Platform-as-a-Service ) project that functionally required the capability of users of the service being able to create system-to-system subscriptions and notifications of events through HTTP channel (that is typically named webhooks , or HTTP callbacks ), I started my design with the ambition to use existing solutions, to avoid the bad practice of reinventing the wheel , but I ended up frustrasi dalam ambisi seperti itu:
Dokumentasi kerangka kerja akan memberi Anda rincian lebih lanjut tentang persyaratan, konfigurasi, penggunaan, dan ekstensibilitas kerangka kerja.
Ngomong -ngomong, untuk membantu Anda memulai dengan kerangka kerja, harap pertimbangkan contoh -contoh berikut yang menunjukkan cara membuat layanan manajemen webhook sederhana, yang menangani langganan dan pemberitahuan, dan penerima klien.
Sebagai penyedia layanan, perpustakaan ini menyediakan fungsi untuk menangani dua aspek utama dari pola webhook:
Contoh berikut menunjukkan cara membuat langganan webhook, dan cara mengirim pemberitahuan ke titik akhir pelanggan:
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 ( ) ;
}
}
} Kerangka kerja ini juga menyediakan satu set penerima bawaan yang dapat digunakan untuk menangani pemberitahuan yang masuk dari titik akhir yang berlangganan dalam aplikasi Anda.
Contoh berikut menunjukkan cara membuat penerima untuk webhook yang didukung oleh pesan Facebook Messenger:
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 ( ) ;
}
}
} Kontribusi untuk proyek open-source, seperti Deveel Webhooks , umumnya didorong oleh minat untuk menggunakan produk dan layanan, jika mereka akan menghormati beberapa harapan yang kami miliki untuk fungsinya.
Cara terbaik untuk berkontribusi dan meningkatkan kualitas proyek ini adalah dengan mencobanya, mengajukan masalah, bergabung dalam percakapan desain, dan membuat permintaan tarik.
Silakan merujuk ke Pedoman yang Berkontribusi untuk menerima rincian lebih lanjut tentang bagaimana Anda dapat berkontribusi pada proyek ini.
Kami bertujuan untuk menjawab sebagian besar pertanyaan yang mungkin Anda miliki dengan memberikan dokumentasi, menjawab pertanyaan yang sering diajukan dan menindaklanjuti masalah -masalah seperti laporan bug dan permintaan fitur.
Proyek ini dirilis di bawah Perjanjian Lisensi Open-Source Apache 2.