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

Если ваш веб-сайт никогда не получает уведомления, вы, возможно, никогда не заблокируете его учетную запись, и они все равно смогут получить доступ к вашему сайту без оплаты. Как ваша система может узнать, что они пропустили платеж?

Вот где могут пригодиться Webhooks. Давайте посмотрим глубже и разберемся.

Для чего используются веб-перехватчики?

В приведенном выше примере Stripe необходимо «сообщить» вашему веб-приложению, что кто-то не заплатил ежемесячный членский взнос из-за истечения срока действия кредитной карты и кто они. Затем используются веб-перехватчики, чтобы убедиться, что это общение возможно.

Веб-перехватчики - это лишь один из немногих способов (например, API-интерфейсы опроса, веб-сокеты и т. Д.) Для взаимодействия веб-приложений друг с другом. Веб-перехватчик может помочь Stripe «сообщить» приложению вашего членского веб-сайта, что кто-то пропустил платеж в приведенном выше примере.

Webhooks управляется событиями

Если кто-то пропускает оплату за ваш членский сайт, это событие. Вы не знаете, когда именно это событие произойдет, но это событие может произойти в любой момент.

Однако всякий раз, когда это событие действительно происходит, оно запускает запрос на URL-адрес веб-перехватчика (подробнее об URL-адресах веб-перехватчика позже), и ваш код может реагировать на событие. Событие вызывает выполнение запроса Webhook, поэтому Webhooks - это техника программирования, управляемая событиями.

Если вы хотите «прислушиваться» к событиям, происходящим в других приложениях, Webhooks вам в этом поможет.

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

Чтобы заставить Webhooks работать, обычно выполняются следующие 4 шага:

  1. Зарегистрируйте URL-адрес в веб-приложении, с которым хотите общаться.
  2. Получайте уведомления от веб-приложения, с которым хотите общаться.
  3. Используйте функции для формирования данных, которые получает ваше веб-приложение.
  4. Отправьте ответ отправителю.

Давай пройдемся по этому поводу.

1. Зарегистрируйте URL

Первый шаг - это регистрация URL-адреса Webhook в стороннем приложении, которое вы хотите слушать.

Принимающее веб-приложение предоставляет URL-адрес веб-перехватчика. Он почти действует как «номер телефона», по которому отправляющее приложение может «позвонить», когда происходит какое-либо событие.

Одним из таких сторонних приложений, с которым вы можете использовать Webhooks, является Stripe. Представьте, что вы создаете членский веб-сайт и используете Stripe для обработки ежемесячных платежей по подписке. Каждый раз, когда срок действия кредитной карты пользователя истекает и вызывает сбой платежа, вы хотите, чтобы Stripe сообщал вашему веб-приложению, с каким URL-адресом «общаться», чтобы наш внутренний сервер знал, что платеж не прошел. Мы называем этот URL-адрес, который получает уведомление от Stripe, «URL-адресом веб-перехватчика».

Stripe отправит нам идентификатор клиента, по кредитной карте которого произошел сбой, который мы можем использовать для поиска пользователя, которому она принадлежит, в нашей базе данных. Оттуда мы можем заблокировать доступ пользователя к его учетной записи, пока он не заплатит.

Например, если у меня есть sunnychopper.com, и я хочу знать, не заплатил ли кто-то за свое членство, я могу создать конечную точку API с URL-адресом, похожим на sunnychopper.com/api/webhooks/failed-payment, и иметь некоторый код, обрабатывающий неудавшийся платеж. Оттуда я перехожу в Stripe и сообщаю Stripe, что они должны отправлять HTTP-запрос на мой URL, sunnychopper.com/api/webhooks/failed-payment, всякий раз, когда происходит неудачный платеж.

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

Каждое веб-приложение, например Stripe, при возникновении события отправляет вам данные в формате JSON или XML. Я рекомендую вам просмотреть документацию по вашему целевому приложению для получения более подробной информации.

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

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

2. Получать уведомления из веб-приложения.

На внутренней стороне вашего приложения вы хотите «прислушиваться» к происходящим событиям, которые определяются URL-адресами веб-перехватчиков, которые вы регистрируете.

Если sunnychopper.com/api/webhooks/failed-payment определен как URL-адрес веб-перехватчика, всякий раз, когда происходит неудачный платеж, мне нужно убедиться, что у меня есть какая-то бэкэнд-функция для этого URL-адреса, которая «прослушивает» неудачный платеж и выполняет некоторые бэкэнд-функции.

Всякий раз, когда происходит неудачный платеж, этому URL-адресу веб-перехватчика будет отправлен запрос POST с некоторой информацией о том, что произошло. Затем бэкэнд-код должен будет прочитать входные данные и решить, что оттуда делать.

3. Формируйте данные из веб-перехватчика.

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

Вы можете получать данные, которые вам нужно использовать для получения дополнительной информации, через другой вызов API. Например, если Stripe отправляет вам идентификатор клиента после неудачного платежа, и вы не можете сопоставить его с пользователем в своей базе данных, вы можете создать еще один запрос к Stripe API, чтобы получить дополнительную информацию.

4. Отправьте ответ отправителю.

Наконец, отправитель события хочет знать, получили вы уведомление или нет. Вы можете сообщить об этом отправителю, вернув ответ JSON с успешным кодом ошибки HTTP.

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

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

Вывод

Веб-перехватчики позволяют вашему веб-приложению взаимодействовать с другими веб-приложениями. Нам больше не нужно использовать дорогостоящие методы, такие как опросы, чтобы выяснить, были ли обновлены некоторые данные. Это позволяет нам создавать гораздо более эффективные веб-приложения.

Обычно вам необходимо зарегистрировать URL-адрес в приложении, из которого вы хотите получать данные. Оттуда вы можете получать данные из стороннего приложения через URL-адрес Webhook. Это позволяет нам «прислушиваться» к событиям, происходящим в веб-приложениях в Интернете.