Представьте, что вы создаете членский веб-сайт и решаете использовать Stripe в качестве обработчика платежей по кредитной карте. Все отлично, пока не истечет срок действия одной из кредитных карт ваших клиентов, из-за чего они не смогут оплатить ваш членский сайт.
Если ваш веб-сайт никогда не получает уведомления, вы, возможно, никогда не заблокируете его учетную запись, и они все равно смогут получить доступ к вашему сайту без оплаты. Как ваша система может узнать, что они пропустили платеж?
Вот где могут пригодиться Webhooks. Давайте посмотрим глубже и разберемся.
Для чего используются веб-перехватчики?
В приведенном выше примере Stripe необходимо «сообщить» вашему веб-приложению, что кто-то не заплатил ежемесячный членский взнос из-за истечения срока действия кредитной карты и кто они. Затем используются веб-перехватчики, чтобы убедиться, что это общение возможно.
Веб-перехватчики - это лишь один из немногих способов (например, API-интерфейсы опроса, веб-сокеты и т. Д.) Для взаимодействия веб-приложений друг с другом. Веб-перехватчик может помочь Stripe «сообщить» приложению вашего членского веб-сайта, что кто-то пропустил платеж в приведенном выше примере.
Webhooks управляется событиями
Если кто-то пропускает оплату за ваш членский сайт, это событие. Вы не знаете, когда именно это событие произойдет, но это событие может произойти в любой момент.
Однако всякий раз, когда это событие действительно происходит, оно запускает запрос на URL-адрес веб-перехватчика (подробнее об URL-адресах веб-перехватчика позже), и ваш код может реагировать на событие. Событие вызывает выполнение запроса Webhook, поэтому Webhooks - это техника программирования, управляемая событиями.
Если вы хотите «прислушиваться» к событиям, происходящим в других приложениях, Webhooks вам в этом поможет.
Как работают веб-перехватчики
Чтобы заставить Webhooks работать, обычно выполняются следующие 4 шага:
- Зарегистрируйте URL-адрес в веб-приложении, с которым хотите общаться.
- Получайте уведомления от веб-приложения, с которым хотите общаться.
- Используйте функции для формирования данных, которые получает ваше веб-приложение.
- Отправьте ответ отправителю.
Давай пройдемся по этому поводу.
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. Это позволяет нам «прислушиваться» к событиям, происходящим в веб-приложениях в Интернете.