Criando um Webhook para receber requisições genéricas com asp.net

0

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.

Fonte: <a href="https://blog.cloud-elements.com/webhooks-vs-polling-youre-better-than-this" target="_blank" rel=https://blog.cloud-elements.com.”/>

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


Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com