Получатели WebHook

Получение WebHooks зависит от того, кто отправитель. Иногда нужны дополнительные действия, регистрирующие верификацию WebHook. Некоторые WebHooks предлагают модель push-to-pull, где запрос HTTP POST только содержит ссылку на информацию о событии, которое затем получается. Зачастую модель безопасности немного отличается.

Цель Microsoft ASP.NET WebHooks состоит в том, чтобы упростить работу с API, не тратя много времени на выяснение того, как обработать конкретный вариант WebHooks.

Получатель WebHook отвечает за прием и верификацию WebHooks от конкретного отправителя. Получатель WebHook может поддерживать несколько WebHooks, каждый из которых имеет разные настройки. Например, получатель GitHub WebHook может получать WebHooks из разных GitHub репозиториев.

URI WebHook получателя

При установке ASP.NET WebHooks вы получаете общий контроллер WebHook, который принимает WebHook запросы от разных сервисов. После получения запроса он вызывает нужный получатель, установленный для обработки конкретного WebHook отправителя.

URI этого контроллера - это WebHook URI, который выглядит вот так:

https://<host>/api/webhooks/incoming/<receiver>/{id}

Из соображений безопасности многие получатели WebHook требуют, чтобы URI был https URI, а также в некоторых случаях он должен содержать дополнительный параметр, который указывает, что только определенный отправитель может работать с WebHooks и данным URI.

Компонент <receiver> - это имя получателя, например, github или slack.

{id} - это дополнительный идентификатор, который можно использовать для определения конкретной конфигурации получателя WebHook. Это можно использовать для регистрации разного числа WebHooks для конкретного получателя. Например, следующие три URI можно использовать для регистрации трех независимых WebHooks:

https://<host>/api/webhooks/incoming/github
https://<host>/api/webhooks/incoming/github/12345
https://<host>/api/webhooks/incoming/github/54321

Установка WebHook получателя

Чтобы получать WebHooks с помощью Microsoft ASP.NET WebHooks, вам нужно установить пакет Nuget для WebHook провайдера или провайдеров, от которых вы хотите получать WebHooks. Пакеты Nuget называются Microsoft.AspNet.WebHooks.Receivers.*, где последняя часть обозначает поддерживаемый сервис. Например, Microsoft.AspNet.WebHooks.Receivers.GitHub поддерживает получение WebHooks с GitHub, а Microsoft.AspNet.WebHooks.Receivers.Custom поддерживает получение WebHooks, сгенерированных ASP.NET WebHooks.

По умолчанию поддерживаются Dropbox, GitHub, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello и WordPress, но можно добавить поддержку и других провайдеров.

Настройка WebHook получателя

WebHook получатели настраиваются с помощью интерфейса IWebHookReceiverConfig, а конкретные реализации этого интерфейса могут быть зарегистрированы с помощью DI. При базовой реализации используются Application Settings, которые можно настроить в Web.config, или при использовании Azure их можно настроить в Azure Portal.

../_images/AzureAppSettings.png

Формат ключей Application Setting выглядит так:

MS_WebHookReceiverSecret_<receiver>

Общее значение - это список значений, соответствующих {id}, для которых зарегистрированы WebHooks, например:

MS_WebHookReceiverSecret_GitHub = <secret1>, 12345=<secret2>, 54321=<secret3>

Инициализация получателя WebHook

WebHook получатели инициализируются при регистрации, обычно в классе WebApiConfig, например:

namespace WebHookReceivers
{
    public static class WebApiConfig
    {
        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 }
            );

            // Load receivers
            config.InitializeReceiveGitHubWebHooks();
        }
    }
}
Поделись хорошей новостью с друзьями!
Следи за новостями!