Introducción a ASP.NET WebHooksASP.NET WebHooks overview

WebHooks es un patrón HTTP ligero que proporciona un modelo de pub/sub simple para el cableado juntos los servicios de SaaS y API Web.WebHooks is a lightweight HTTP pattern providing a simple pub/sub model for wiring together Web APIs and SaaS services. Cuando se produce un evento en un servicio, se envía una notificación en forma de una solicitud HTTP POST a los suscriptores registrados.When an event happens in a service, a notification is sent in the form of an HTTP POST request to registered subscribers. La solicitud POST contiene información sobre el evento que hace posible para el receptor para que actúe en consecuencia.The POST request contains information about the event which makes it possible for the receiver to act accordingly.

Debido a su simplicidad, WebHooks ya están expuestos por un gran número de servicios incluidos Dropbox, GitHub, Bitbucket, MailChimp , PayPal, Slack, bandas, Trelloy mucho más.Because of their simplicity, WebHooks are already exposed by a large number of services including Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Slack, Stripe, Trello, and many more. Por ejemplo, un WebHook puede indicar que un archivo ha cambiado en Dropbox, o se ha confirmado un cambio de código en GitHub, o se ha iniciado un pago en PayPal, o se ha creado una tarjeta en Trello.For example, a WebHook can indicate that a file has changed in Dropbox, or a code change has been committed in GitHub, or a payment has been initiated in PayPal, or a card has been created in Trello. Las posibilidades son infinitas.The possibilities are endless!

Microsoft ASP.NET WebHooks hace más fácil de enviar y recibir WebHooks como parte de la aplicación ASP.NET:Microsoft ASP.NET WebHooks makes it easier to both send and receive WebHooks as part of your ASP.NET application:

  • En el lado receptor, proporciona un modelo común para recibir y procesar WebHooks de cualquier número de proveedores de WebHook.On the receiving side, it provides a common model for receiving and processing WebHooks from any number of WebHook providers. Incluye de forma predetermina con compatibilidad para Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, bandas, Trello, WordPress y Zendesk pero es fácil agregar compatibilidad para obtener más información.It comes out of the box with support for Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello,WordPress and Zendesk but it is easy to add support for more.

  • En el lado emisor proporciona soporte técnico para administrar y almacenar las suscripciones, así como para enviar notificaciones de eventos para el conjunto correcto de los suscriptores.On the sending side it provides support for managing and storing subscriptions as well as for sending event notifications to the right set of subscribers. Esto le permite definir su propio conjunto de eventos que pueden suscribirse a los suscriptores y se les notifiquen cuando las cosas se produce.This allows you to define your own set of events that subscribers can subscribe to and notify them when things happens.

Las dos partes se pueden usar conjuntamente o diferencia según el escenario.The two parts can be used together or apart depending on your scenario. Si solo tiene que recibir WebHooks de otros servicios, a continuación, puede usar solo la parte receptora; Si solo desea exponer WebHooks para que otros usuarios para consumir, puede hacer justamente eso.If you only need to receive WebHooks from other services then you can use just the receiver part; if you only want to expose WebHooks for others to consume, then you can do just that.

El código tiene como destino ASP.NET Web API 2 y ASP.NET MVC 5 y está disponible como OSS en GitHub.The code targets ASP.NET Web API 2 and ASP.NET MVC 5 and is available as OSS on GitHub.

Información general de WebHooksWebHooks Overview

WebHooks es un patrón que significa que varía de cómo se usa desde el servicio al servicio, pero la idea básica es la misma.WebHooks is a pattern which means that it varies how it is used from service to service but the basic idea is the same. Puede pensar WebHooks como un modelo de pub/sub simple donde un usuario puede suscribirse a eventos que ocurren en otros lugares.You can think of WebHooks as a simple pub/sub model where a user can subscribe to events happening elsewhere. Se propagan las notificaciones de eventos como solicitudes HTTP POST que contiene información sobre el propio evento.The event notifications are propagated as HTTP POST requests containing information about the event itself.

Normalmente, la solicitud HTTP POST contiene un objeto JSON o datos de formulario HTML determinados por el remitente de WebHook, incluida la información sobre el evento que provoca el WebHook para desencadenar.Typically the HTTP POST request contains a JSON object or HTML form data determined by the WebHook sender including information about the event causing the WebHook to trigger. Por ejemplo, un ejemplo de un cuerpo de solicitud POST del WebHook de GitHub tiene este aspecto como resultado un problema nuevo se abre en un repositorio determinado:For example, an example of a WebHook POST request body from GitHub looks like this as a result of a new issue being opened in a particular repository:

{
  "action": "opened",
  "issue": {
      "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
      "number": 1347,
      ...
  },
  "repository": {
      "id": 1296269,
      "full_name": "octocat/Hello-World",
      "owner": {
          "login": "octocat",
          "id": 1
          ...
      },
      ...
  },
  "sender": {
      "login": "octocat",
      "id": 1,
      ...
  }
}

Para asegurarse de que el WebHook procede realmente del remitente, la solicitud POST se protegen de alguna manera y, a continuación, se comprobó el receptor.To ensure that the WebHook is indeed from the intended sender, the POST request is secured in some way and then verified by the receiver. Por ejemplo, WebHooks de GitHub incluye un X-Hub-Signature encabezado HTTP con un hash del cuerpo de la solicitud que se comprueba mediante la implementación del receptor para que no tenga que preocuparse.For example, GitHub WebHooks includes an X-Hub-Signature HTTP header with a hash of the request body which is checked by the receiver implementation so you don't have to worry about it.

Por lo general, el flujo de WebHook es algo como esto:The WebHook flow generally goes something like this:

  • El remitente WebHook expone eventos que se puede suscribir un cliente.The WebHook sender exposes events that a client can subscribe to. Los eventos describen cambios observables en el sistema, por ejemplo que un nuevo elemento de datos se ha insertado, que se ha completado un proceso o alguna otra cosa.The events describe observable changes to the system, for example that a new data item has been inserted, that a process has completed, or something else.

  • El receptor de WebHook se suscribe al registrar un WebHook que consta de cuatro elementos:The WebHook receiver subscribes by registering a WebHook consisting of four things:

    1. Un URI de donde se debe registrar la notificación de eventos en forma de una solicitud HTTP POST;A URI for where the event notification should be posted in the form of an HTTP POST request;

    2. Un conjunto de filtros que describe los eventos concretos para el que se debe desencadenar el WebHook;A set of filters describing the particular events for which the WebHook should be fired;

    3. Una clave secreta que se usa para firmar la solicitud HTTP POST;A secret key which is used to sign the HTTP POST request;

    4. Datos adicionales que debe incluirse en la solicitud HTTP POST.Additional data which is to be included in the HTTP POST request. Por ejemplo puede ser más campos de encabezado HTTP o las propiedades incluidas en el cuerpo de solicitud HTTP POST.This can for example be additional HTTP header fields or properties included in the HTTP POST request body.

  • Una vez que se produce un evento, se encuentran los registros coincidentes de WebHook y se envían las solicitudes HTTP POST.Once an event happens, the matching WebHook registrations are found and HTTP POST requests are submitted. Normalmente, la generación de las solicitudes HTTP POST se reintentan varias veces si por alguna razón que el destinatario no responde o los resultados de la solicitud HTTP POST en una respuesta de error.Typically, the generation of the HTTP POST requests are retried several times if for some reason the recipient is not responding or the HTTP POST request results in an error response.

Canalización de procesamiento de WebHooksWebHooks Processing Pipeline

La canalización de procesamiento de Microsoft ASP.NET WebHooks para WebHooks entrantes tiene este aspecto:The Microsoft ASP.NET WebHooks processing pipeline for incoming WebHooks looks like this:

Canalización de procesamiento de ASP.NET WebHooks

Los conceptos clave dos son receptores y controladores:The two key concepts here are Receivers and Handlers:

  • Receptores son responsables de para controlar el tipo de WebHook de un remitente determinado y para exigir comprobaciones de seguridad para asegurarse de que la solicitud de WebHook procede realmente del remitente.Receivers are responsible for handling the particular flavor of WebHook from a given sender and for enforcing security checks to ensure that the WebHook request indeed is from the intended sender.

  • Controladores suelen ser donde ejecuta código de usuario, el WebHook determinado de procesamiento.Handlers are typically where user code runs processing the particular WebHook.

En los siguientes nodos estos conceptos se describen con más detalle.In the following nodes these concepts are described in more details.