WebHooks é um padrão HTTP leve, fornecendo um modelo simples de pub/sub para conectar os serviços de SaaS e APIs da Web. Quando ocorre um evento em um serviço, uma notificação é enviada na forma de uma solicitação HTTP POST para assinantes registrados. Webhooks permitem criar integrações que comunicam eventos ocorridos no decorrer do tempo. Quando um evento ocorre, o sistema notifica a sua aplicação (no caso o webhook que estaremos criando) imediatamente, através de uma requisição HTTP POST
para a URL do webhook.
Pollings vs Webhooks
Com webhooks sua aplicação não precisa ficar executando pollings (consultas de tempos em tempos) na API cliente/fornecedora. Um webhook é disparado automaticamente quando ocorrer um novo evento.
Pollings e webhooks tem o mesmo objetivo, porém eles são muito mais eficientes, pois só transferem dados quando há uma atualização no recurso esperado. Segundo o Zapier, mais de 98,5% das requisições que realizam pollings são desperdiçadas. Isso significa que pollings geram, em média, 66x mais requisições do que webhooks.
A finalidade de WebHooks de ASP.NET da Microsoft é torná-la mais simples e mais consistente para conectar sua API sem gastar muito tempo descobrindo como lidar com qualquer variante específico de WebHooks.
Bom, primeiramente você deve criar um projeto web API com .NET. E após isto instalar os seguintes packages:
- Microsoft.AspNet.WebHooks.Common
- Microsoft.AspNet.WebHooks.Custom
- Microsoft.AspNet.WebHooks.Receivers
- Microsoft.AspNet.WebHooks.Receivers.Generic
Após o projeto criado, você deve realizar uma série de configurações:
1º Adicione a configuração no seu arquivo de configurações da API :
// adicionar no WebApiConfig.cs public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.InitializeReceiveCustomWebHooks(); //<<<--- }
2º Adicione a configuração no seu web.config:
<appSettings> <!-- Adicione essa chave no seu web.Config O valor pode ser outro, cada webhook tem o seu --!> <add key="MS_WebHookReceiverSecret_GenericJson" value="83699ec7c1d794c0c780e49a5c72972590571fd8"/> </appSettings>
3º Crie uma nova controller, herdando da classe WebHookHandler. Esta controller será onde todo o webhook processará a requisição:
public class GenericJsonWebHookHandler: WebHookHandler { public GenericJsonWebHookHandler() { this.Receiver = GenericJsonWebHookReceiver.ReceiverName; } public override Task ExecuteAsync(string receiver, WebHookHandlerContext context) { try { // Get JSON from WebHook JObject data = context.GetDataOrDefault<JObject>(); // Get the action for this WebHook coming from the action query parameter in the URI string action = context.Actions.FirstOrDefault(); } catch (Exception) { throw; } return Task.FromResult(true); } }
Pronto, o seu webhook já está configurado para receber requisições em genéricas em Json. URL padrão será: http://host/
/api/webhooks/incoming/genericjson?code=83699ec7c1d794c0c780e49a5c72972590571fd8
Lembrando que o parametro code, é o código que configuramos no web.config.
Leia mais sobre o assunto: https://docs.microsoft.com/pt-br/aspnet/webhooks/receiving/receivers