يوفر هذا المشروع مجموعة من أدوات .NET لإدارة الاشتراكات في الأحداث ، والتحولات الأساسية وإشعارات أحداث الأحداث هذه ( WebHooks ): في نطاق التصميم العالمي ، يتيح هذا النموذج البنى التي تعتمد على الأحداث ، مما يؤدي إلى عمليات النظام عند حدوث الحوادث المتوقعة من أنظمة أخرى.
على الرغم من اعتماد نموذج التكامل هذا على نطاق واسع من قبل مقدمي الخدمات الرئيسيين (مثل SendGrid ، Twilio ، Github ، Slack ، إلخ) ، لا يوجد بروتوكول أو سلطة رسمية من شأنها أن تنفذ الامتثال (مثل الحالات الأخرى ، مثل OpenID ، Openapi ، إلخ).
على أي حال ، يتكون التنفيذ النموذجي من العناصر التالية:
حاولت التعبير عن المفاهيم بمزيد من التفصيل في هذه الصفحة داخل هذا المستودع (دون أي طموح ليكون تربويًا).
المكتبات التي توفرها حاليًا الإطار هي ما يلي:
| مكتبة | nuget | جيثب (prelease) |
|---|---|---|
| deveel.webhooks | ||
| deveel.webhooks.sender | ||
| deveel.webhooks.service | ||
| deveel.webhooks.mongodb | ||
| deveel.webhooks.entityframework | ||
| deveel.webhooks.dynamiclinq | ||
| deveel.webhooks.receiver.aspnetcore |
تمديد المكتبات التالية الإطار باستخدام أجهزة الاستقبال لمقدمي الخدمات المحددة:
| مكتبة | nuget | جيثب (prelease) |
|---|---|---|
| deveel.webhooks.receiver.twilio | ||
| deveel.webhooks.receiver.sendgrid | ||
| deveel.webhooks.receiver.facebook |
يمكنك الحصول على الإصدارات المستقرة من هذه المكتبات من قناة Nuget الرسمية.
للحصول على أحدث إصدارات ما قبل الإصدار من الحزم التي يمكنك استعادتها من مدير حزمة Deveel.
نود مساعدتك في البدء في هذا الإطار ولتوسيعه في النهاية: يرجى الرجوع إلى قسم الوثائق ، أو إلى الموقع الرسمي الذي أنتجناه لك.
أسهل طريقة للبدء هي اتباع دليل البدء ، ولكن يمكنك أيضًا الرجوع إلى قسم الأسئلة المتكرر للحصول على إجابات على الأسئلة الأكثر شيوعًا.
أثناء العمل على مشروع .NET Core 3.1/.NET 5 PaaS ( منصة كخدمة ) يتطلب من الناحية وظيفيًا قدرة مستخدمي الخدمة على القدرة على إنشاء اشتراكات من النظام إلى النظام وإشعارات الأحداث من خلال قناة HTTP (التي يتم تسميتها عادةً ما يتم تسميتها ، إلا أنني أُعرفت عن التمارين المعروفة ، ولكنني أُعرفت عن التمارين المعيبة ، ولكنني أُعرفت بالتحل عن الإحباط. في مثل هذا الطموح:
ستزودك وثائق الإطار بمزيد من التفاصيل حول المتطلبات والتكوينات واستخدامها وقابليتها على توسيع نطاقها.
على أي حال ، لمساعدتك في البدء في الإطار ، يرجى مراعاة الأمثلة التالية التي توضح كيفية إنشاء خدمة إدارة ويب بسيطة ، والتي تتعامل مع الاشتراكات والإشعارات ، ومستقبل العميل.
كمزود للخدمة ، توفر هذه المكتبة وظائف للتعامل مع الجانبين الرئيسيين لنمط 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 ( ) ;
}
}
} يوفر Framework أيضًا مجموعة من أجهزة الاستقبال المدمجة التي يمكن استخدامها للتعامل مع الإخطارات الواردة من نقاط النهاية المشتركة في التطبيق الخاص بك.
يوضح المثال التالي كيفية إنشاء جهاز استقبال لخطبة ويب مدعومة برسالة رسول على Facebook:
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 مفتوحة المصدر.