Обзор ASP.NET WebHooks

WebHooks - это HTTP паттерн, предлагающий простую модель pub/sub для совместной записи Web API и SaaS сервисов. Когда в сервисе происходит событие, уведомление отправляется в форме HTTP POST запроса зарегистрированным подписчикам. POST содержит информацию о событии, что дает возможность получателю действовать соответственно.

Из-за свой простоты WebHooks представлен во многих сервисах, включая Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Slack, Stripe, Trello и так далее. Например, WebHook может определить, что файл был изменен в Dropbox, или код был закоммичен на GitHub, или платеж прошел по PayPal, или карта была создана в Trello. Возможности безграничны!

Microsoft ASP.NET WebHooks упрощает получение и отправление WebHooks как часть вашего ASP.NET приложения:

  • При получении он получает общую модель для получения и обработки WebHooks от WebHook провайдеров. Здесь имеется поддержка для Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello и WordPress, но можно добавить и больше.
  • При отправке он предоставляет поддержку для управления и сохранения подписок, а также для отправления уведомлений о событиях нужным подписчикам. Это позволяет вам определить собственный набор событий, на которые можно подписаться и получать уведомления.

Все это можно использовать совместно или по отдельности, в зависимости от сценария. Если вам нужно только получать WebHooks из другого сервиса, тогда вам нужно использовать только получение; соответственно, при отправке происходит то же самое.

См. OSS на GitHub.

Обзор WebHooks

WebHooks - это паттерн, то есть, его использование может быть разным в зависимости от сервиса, но основная идея остается той же самой. Вы можете считать WebHooks простой моделью pub/sub, где пользователь может подписаться на любые события. Уведомления о событиях распространяются как HTTP POST запросы, содержащие информацию о самом событии.

Обычно HTTP POST запрос содержит объект JSON или данные HTML, определенные отправителем WebHook, включая информацию о событии, которое запускает WebHook. Например, тело запроса WebHook POST из GitHub выглядит вот так, и это результат нового вопроса, открытого в конкретном репозитории:

{
  "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,
      ...
  }
}

Чтобы убедиться, что WebHook отправлен должным образом, запрос POST защищен и верифицирован получателем. Например, GitHub WebHooks включает в себя HTTP заголовок X-Hub-Signature с хэшем тела запроса, который проверяется получателем.

Работа WebHook обычно выглядит следующим образом:

  • Отправитель WebHook представляет события, на которые может подписаться клиент. События описывают общие изменения в системе, например, что были добавлены новые данные.

  • Получатель WebHook подписывается, регистрируя WebHook, состоящий из 4 элементов:

    1. URI, куда должно быть отправлено уведомление в форме HTTP POST запроса;
    2. Набора фильтров, описывающих конкретное событие, для которого нужно запускать WebHook;
    3. Секретного ключа, который предназначен для определения HTTP POST запроса;
    4. Дополнительных данных, которые включены в HTTP POST запрос. Это, допустим, могут быть дополнительные поля HTTP заголовка или свойства, включенные в тело HTTP POST запроса.
  • Когда происходит событие, находится соответствующая регистрация WebHook и предоставляются HTTP POST запросы. Обычно генерация HTTP POST запросов происходит несколько раз, если по какой-то причине получатель не отвечает или HTTP POST запрос выдает ошибку.

Рабочий поток WebHooks

Рабочий поток Microsoft ASP.NET WebHooks выглядит следующим образом:

_images/WebHookReceivers.png

Есть два основных элемента - Receivers и Handlers:

  • Receivers отвечают за обработку конкретного WebHook от данного отправителя, а также за проверку безопасности, чтобы гарантировать, что WebHook запрос исходит от нужного отправителя.
  • Handlers обрабатывают конкретный WebHook.
Поделись хорошей новостью с друзьями!
Следи за новостями!