Обзор веб-перехватчиков ASP.NET

Веб-перехватчики — это упрощенный шаблон HTTP, предоставляющий простую модель pub/sub для объединения веб-API и служб SaaS. При возникновении события в службе уведомление отправляется зарегистрированным подписчикам в виде HTTP-запроса POST. Запрос POST содержит сведения о событии, которые позволяют получателю действовать соответствующим образом.

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

Веб-перехватчики Microsoft ASP.NET упрощают отправку и получение веб-перехватчиков в составе приложения ASP.NET:

  • На принимающей стороне она предоставляет общую модель для получения и обработки веб-перехватчиков от любого количества поставщиков веб-перехватчиков. Он поставляется из коробки с поддержкой Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello,WordPress и Zendesk, но это легко добавить поддержку для большего.

  • На стороне отправки он обеспечивает поддержку управления и хранения подписок, а также отправки уведомлений о событиях нужному набору подписчиков. Это позволяет определить собственный набор событий, на которые подписчики могут подписаться, и уведомлять их о событиях.

Эти две части можно использовать вместе или поорознь в зависимости от вашего сценария. Если вам нужно получать только веб-перехватчики из других служб, можно использовать только часть получателя; Если вы хотите предоставлять только веб-перехватчики для других пользователей, вы можете сделать именно это.

Код предназначен для веб-API ASP.NET 2 и ASP.NET MVC 5 и доступен в виде OSS на сайте GitHub.

Обзор веб-перехватчиков

Веб-перехватчики — это шаблон, который означает, что он зависит от службы к службе, но основная идея одинакова. Веб-перехватчики можно рассматривать как простую модель публикации или подсети, в которой пользователь может подписаться на события, происходящие в другом месте. Уведомления о событиях распространяются в виде 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,
      ...
  }
}

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

Поток веб-перехватчика обычно выполняется примерно так:

  • Отправитель веб-перехватчика предоставляет события, на которые клиент может подписаться. События описывают наблюдаемые изменения в системе, например вставку нового элемента данных, завершение процесса или что-то другое.

  • Получатель веб-перехватчика подписывается, регистрируя веб-перехватчик, состоящий из четырех вещей:

    1. Универсальный код ресурса (URI) для отправки уведомления о событии в виде HTTP-запроса POST;

    2. Набор фильтров, описывающих конкретные события, для которых должен быть запущен веб-перехватчик;

    3. Секретный ключ, используемый для подписи HTTP-запроса POST;

    4. Дополнительные данные, которые должны быть включены в HTTP-запрос POST. Например, это могут быть дополнительные поля заголовка HTTP или свойства, включенные в текст запроса HTTP POST.

  • После возникновения события обнаруживаются соответствующие регистрации веб-перехватчиков и отправляются HTTP-запросы POST. Как правило, создание HTTP-запросов POST повторяется несколько раз, если по какой-либо причине получатель не отвечает или HTTP-запрос POST приводит к ошибке.

Конвейер обработки веб-перехватчиков

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

Конвейер обработки веб-перехватчиков ASP.NET

Ниже приведены два ключевых понятия: "Получатели" и "Обработчики".

  • Получатели отвечают за обработку конкретного варианта веб-перехватчика от заданного отправителя и за выполнение проверок безопасности, чтобы убедиться, что запрос веб-перехватчика действительно от предполагаемого отправителя.

  • Обработчики обычно выполняют пользовательский код, обрабатывающий конкретный веб-перехватчик.

В следующих узлах эти понятия описаны более подробно.