이 프로젝트는 이벤트에 대한 가입, 기본 변환 및 이러한 이벤트 발생 ( WebHooks )에 대한 구독 관리를위한 .NET 도구 세트를 제공합니다. 글로벌 설계 범위 에서이 모델은 이벤트 중심의 아키텍처를 가능하게하여 다른 시스템의 예상 발생 발생시 시스템 프로세스를 트리거합니다.
이 통합 모델은 주요 서비스 제공 업체 ( Sendgrid , Twilio , Github , Slack 등)에 의해 널리 채택되지만 (OpenID, OpenAPI 등과 같은 다른 경우와 같은) 규정 준수를 시행하는 공식적인 프로토콜이나 권한은 없습니다.
어쨌든 일반적인 구현은 다음 요소로 구성됩니다.
이 페이지 에서이 페이지에서 개념을 더 자세히 표현하려고 노력했습니다 (교육적이라는 야심이 없음).
프레임 워크에서 현재 제공 한 라이브러리는 다음과 같습니다.
| 도서관 | 너겟 | github (사전) |
|---|---|---|
| Deveel.webhooks | ||
| Deveel.webhooks.sender | ||
| Deveel.webhooks.service | ||
| Deveel.webhooks.mongodb | ||
| Deveel.webhooks.entityframework | ||
| Deveel.webhooks.dynamiclinq | ||
| Deveel.webhooks.receiver.aspnetcore |
다음 라이브러리는 특정 제공 업체에 대한 수신자로 프레임 워크를 확장합니다.
| 도서관 | 너겟 | github (사전) |
|---|---|---|
| Deveel.webhooks.receiver.twilio | ||
| Deveel.webhooks.receiver.sendgrid | ||
| Deveel.webhooks.receiver.facebook |
NUGET 공식 채널에서 이러한 라이브러리의 안정적인 버전을 얻을 수 있습니다.
최신 프리 릴리스 버전의 패키지를 얻으려면 Deveel 패키지 관리자로부터 복원 할 수 있습니다.
우리는이 프레임 워크를 시작하고 결국 확장하는 데 도움을주고 싶습니다. 문서 섹션 또는 귀하를 위해 제작 한 공식 웹 사이트 를 참조하십시오.
시작하는 가장 쉬운 방법은 시작 가이드를 따르는 것이지만 자주 묻는 질문 섹션을 참조하여 가장 일반적인 질문에 대한 답변을 얻을 수도 있습니다.
.NET Core 3.1/.NET 5 PAAS ( 플랫폼-서비스 ) 프로젝트에서 작업하는 동안 서비스 사용자가 HTTP 채널 (일반적으로 WebHooks ) 또는 HTTP 콜백을 통해 이벤트를 제작할 수있는 서비스 사용자의 기능을 기능적으로 요구했습니다. 그러한 야망에서 :
프레임 워크의 문서화는 프레임 워크의 요구 사항, 구성, 사용 및 확장성에 대한 자세한 내용을 제공합니다.
어쨌든 프레임 워크를 시작할 수 있도록 간단한 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 메신저 메시지로 뒷받침되는 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 오픈 소스 라이센스 계약에 따라 발표됩니다.