Обзор веб-перехватчиков 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 с хэшом текста запроса, который проверяется реализацией получателя, поэтому вам не нужно беспокоиться об этом.
Поток веб-перехватчика обычно выполняется примерно так:
Отправитель веб-перехватчика предоставляет события, на которые клиент может подписаться. События описывают наблюдаемые изменения в системе, например вставку нового элемента данных, завершение процесса или что-то другое.
Получатель веб-перехватчика подписывается, регистрируя веб-перехватчик, состоящий из четырех вещей:
Универсальный код ресурса (URI) для отправки уведомления о событии в виде HTTP-запроса POST;
Набор фильтров, описывающих конкретные события, для которых должен быть запущен веб-перехватчик;
Секретный ключ, используемый для подписи HTTP-запроса POST;
Дополнительные данные, которые должны быть включены в HTTP-запрос POST. Например, это могут быть дополнительные поля заголовка HTTP или свойства, включенные в текст запроса HTTP POST.
После возникновения события обнаруживаются соответствующие регистрации веб-перехватчиков и отправляются HTTP-запросы POST. Как правило, создание HTTP-запросов POST повторяется несколько раз, если по какой-либо причине получатель не отвечает или HTTP-запрос POST приводит к ошибке.
Конвейер обработки веб-перехватчиков Microsoft ASP.NET для входящих веб-перехватчиков выглядит следующим образом:
Ниже приведены два ключевых понятия: "Получатели" и "Обработчики".
Получатели отвечают за обработку конкретного варианта веб-перехватчика от заданного отправителя и за выполнение проверок безопасности, чтобы убедиться, что запрос веб-перехватчика действительно от предполагаемого отправителя.
Обработчики обычно выполняют пользовательский код, обрабатывающий конкретный веб-перехватчик.
В следующих узлах эти понятия описаны более подробно.