Асинхронность в REST API:
как тестировать Webhook
Дудник Н.В.
План вебинара
  • О себе
  • Что такое интеграция, способы взаимодействия микросервисов
  • Интеграции между сервисами
  • Синхронная интеграция
  • Асинхронная интеграция
  • Основные виды API, используемые для интеграций
  • Основные виды REST API, используемые для интеграций
  • Что такое Webhook?
  • Как работают вебхуки/веб-хуки?
  • Что важно при тестировании Webhook?
  • Информация про Webhook на сайте CoreApp
  • Что важно при тестировании Webhook на сайте Vikunja
  • Как работает Webhook в Vikunja
  • Как создать веб-хук вручную в интерфейсе Vikunja
  • Поддерживаемые события для проекта на сайте Vikunja
  • Выбранные события для задач проекта на сайте Vikunja
  • Практика: Создание Webhook для проекта
  • Webhook в Vikunja - X-Vikunja-Signature с HMAC-подписью
  • Сценарий Webhook в Vikunja - Тестирование в Postman
  • Тестирование Webhook в Vikunja через Postman (детали)
  • Проверка Webhook после создания задачи task
  • Плюсы и минусы веб-хуков
  • В чем разница между веб-хуками и обычным API?
  • Дополнительная литература
  • Курс и вебинары о подготовке на собеседования по тестированию ПО и закрепления знаний (бонус вебинара)
  • Курс по тестированию бэкенда (старт нового потока в августе)
  • Ваши вопросы
О себе
Высшее образование - ОмГУ Ф.М. Достоевского, Физический факультет
6 лет была преподавателем по физике - с 2009-2015гг.
10 лет в тестировании - старт июнь, 2015г.
Проекты: Luxoft (Boeing, DHL, Drawback); Wiley (Wiley Online Library)
Сейчас Главный инженер по тестированию в Сбере (платформа ЕФС)
Веду блог по тестированию Protestinginfo, нравится собирать информацию по тестированию и делиться знаниями с людьми
Что такое интеграция?
Интеграция - взаимодействие чего-то с чем-то.
Интеграционное тестирование проверяет, как разные части системы взаимодействуют между собой. Основная цель — убедиться, что модули, системы или сервисы работают вместе так, как что описано в документации.
Основные типы интеграций:
  • Модули в одном приложении: проверка взаимодействия компонентов внутри программы.
  • Взаимодействие между сервисами: проверка, как две и более системы обмениваются данными.
  • Интеграция с внешними системами: проверяем, как приложение взаимодействует с другими системами, например, с операционной системой или оборудованием.
Пример: отправить запрос (POST) с телом в одну систему и проверить, что другая система сохранила данные в своей базе данных.
Способы взаимодействия микросервисов
  1. Синхронное
  1. Асинхронное
  1. Событийно-ориентированная архитектура (EDA - Event driven architecture)
  1. Непрерывное соединение в режиме реального времени (Streaming)
Интеграции между сервисами
Есть несколько способов, как системы могут взаимодействовать между собой:
  • Прямые API-вызовы: Одна система отправляет запрос (например, через REST API), а другая отвечает. По принципу «запрос-ответ» или «в одну сторону».
  • Брокеры сообщений: Вместо того чтобы передавать данные напрямую, системы используют посредников, таких как RabbitMQ или Kafka. Это похоже на почтовую службу, которая доставляет сообщения между системами.
  • Обмен файлами: Иногда системы обмениваются данными через файлы, используя FTP или другие протоколы. На уровне баз данных тестирование может включать:
  • Одна общая БД для нескольких систем: тестирование совместного использования базы данных разными системами.
  • Связанные базы данных: проверка взаимодействия через ETL/ELT-процессы для передачи данных между различными БД.
  • SDK - Software Development Kit» – набор для разработки программного обеспечения
Пример: Система A отправляет запрос в систему B через брокер сообщений, чтобы передать данные для дальнейшей обработки
Пример на простом языке
Представь, что ты заказываешь еду в ресторане:
  1. Синхронное взаимодействие: Ты делаешь заказ и остаешься стоять у стойки, ожидая, пока повар приготовит блюдо. Только когда тебе отдадут еду, ты можешь уйти. Если отойдешь раньше – придется заказывать заново.
  1. Асинхронное взаимодействие: Ты делаешь заказ, получаешь номерок и уходишь заниматься своими делами. Когда заказ готов, ресторан отправляет тебе уведомление (или громко объявляет номер), и ты приходишь забирать еду.
Этот пример наглядно показывает разницу между синхронным (ждешь, пока работа будет завершена) и асинхронным (можешь заниматься другими делами, пока процесс идет).
Синхронные интеграции
Синхронное общение:
Это когда одна программа сразу ждет ответа от другой.
Пример: вы запрашиваете данные у сайта и ждете, пока он их вам вернет.
Пока ответ не будет получен, клиент не может делать другие задачи.
Синхронное взаимодействие — это когда клиент, отправив запрос, может продолжить работу только тогда, когда сервер ответит. Каждая операция ожидает окончания предыдущей. Подходит под те ситуации, когда данные из ответа нужно получать сразу.
Примеры:
  • создание учетной записи пользователя - синхронный запрос
  • синхронный запрос на получение каталога товаров.
  • синхронное взаимодействие с платёжной системой и мы, как пользователи, должны ждать, пока оплата пройдёт, чтобы не было неожиданностей
Асинхронные интеграции
Асинхронное общение:
Это когда программа отправляет запрос и не ждет ответа сразу. Она продолжает работать и может получить ответ позже.
Пример: отправка сообщения другу в мессенджере, вы не ждете ответа мгновенно.
То есть Клиент в момент обработки запроса может делать другие задачи. Как только обработка запроса на сервере будет завершена, то клиент должен получить информацию об этом: Клиент сам периодически будет опрашивать сервер о готовности задачи.Сервер сам сообщит клиенту о завершении выполнения задачи.
Асинхронное взаимодействие — это когда запрос отправлен, но будет обработан не сразу, а позже - фоново. Т. е. пользователь может подождать результаты занимаясь другими делами.
Пример Загрузка видео на YouTube
Асинхронно: Ты начинаешь загрузку, можешь переключиться на другие вкладки, смотреть видео, отвечать на комментарии, а загрузка продолжается в фоне.
Основные виды API, используемые для интеграций.
API-тестирование проверяет, как приложение взаимодействует с другими системами через внешние интерфейсы. Это важно для проверки правильной работы клиент-серверного взаимодействия.
Основные виды REST API, используемые для интеграций.
REST API – В основном синхронное, но может быть асинхронным
  • REST (Representational State Transfer) использует HTTP-методы (GET, POST, PUT, DELETE и т. д.).
  • Обычно работает по запросно-ответной модели, то есть клиент отправляет запрос и ждет ответ.
  • Однако REST может быть асинхронным при использовании:
  • Webhooks (сервер отправляет уведомления клиенту)
  • Long Polling (клиент держит соединение открытым, пока сервер не пришлет данные)
  • Server-Sent Events (SSE) (сервер отправляет обновления клиенту без запроса)
Что такое Webhook?
Webhook — это обратный вызов: сервер отправляет HTTP-запрос на зарегистрированный клиентом URL при наступлении события.
Webhook — это механизм доставки события от одного сервиса к другому через HTTP POST
Инициатор вызывает endpoint получателя при наступлении события
Отправка = синхронная (POST-запрос), обработка = асинхронная
Веб-хуки (webhooks) - это механизм, который позволяет одним системам или сервисам сообщать другим о произошедших событиях
Что такое Webhook?
Веб-хук — это способ автоматически отправлять данные от одного сервиса к другому при наступлении события. Он формирует HTTP-запрос (чаще всего POST) и отправляет его на заранее заданный URL без необходимости ручного запроса. В отличие от синхронного API, где запрос инициирует клиент, при веб-хуке инициатором выступает система: она сама "стучится" в другой сервис, когда что-то произошло.
Пример 1 — сайт CoreApp:
Когда автор курса проверяет домашнюю работу ученика (принимает или отклоняет), веб-хук отправляет событие в Unisender. В результате ученик получает письмо с результатом проверки: либо "Работа принята", либо "Домашка требует доработки".
Это позволяет мгновенно уведомлять учеников без дополнительных действий со стороны ментора.
Пример 2 — сайт Vikunja:
В системе Vikunja настроен веб-хук на создание задач. Как только пользователь создаёт новую задачу в конкретном проекте, Vikunja автоматически отправляет POST-запрос с информацией о задаче (например, ID, название, дедлайн) на указанный URL. В системе Vikunja веб-хуки позволяют мгновенно уведомлять другие сервисы о действиях, происходящих в проектах — без необходимости ручных запросов через API. Это удобно, если вы хотите связать Vikunja с внешними сервисами — ботами, аналитикой, трекерами времени, внутренними инструментами и т.д. Допустим, вы используете Vikunja как менеджер задач для команды. Вы создаёте веб-хук, который будет отправлять POST-запрос в Telegram-бот каждый раз, когда кто-то создаёт новую задачу в проекте. Таким образом, вся команда мгновенно получает уведомление в чате и остаётся в курсе.
Как работают веб-хуки?
1
Установка:
Сначала необходимо настроить веб-хуки в системе-источнике и указать адрес, куда будут отправляться уведомления.
2
Событие:
Когда в системе-источнике происходит событие, на которое настроен веб-хук, система отправляет HTTP-запрос (POST) на указанный адрес.
3
Обработка:
Система-приемник получает этот запрос и может обработать информацию о событии, например, отправить уведомление пользователю или автоматически обновить данные в своей системе.
Что важно при тестировании Webhook?
  • Корректность endpoint'а (валидный URL, доступность, авторизация)
  • Структура payload'а (соответствие схеме: JSON, поля, типы)
  • Обработка данных на стороне получателя (валидный ответ)
  • Валидация заголовков/подписей (если есть секретный ключ, токен и пр.)
Информация про Webhook на сайте CoreApp
Подключение веб-хуков https://help-ru.coreapp.ai/webhooks
Коротко: создайте и подключите веб-хуки к сервисам коммуникации с вашими клиентами, отправляйте им триггерные сообщения, а также сообщения в зависимости от статуса прохождения уроков и курсов.
Событие.
CoreApp предоставляет набор событий на платформе, по которым будет отправлен запрос на указанный хук:
  • Заполнил форму сбора контактов (только в школе)
  • Ученик присоединился к курсу
  • Ученик начал урок в курсе
  • Ученик закончил урок в курсе
  • Ученик завершил курс
  • Ученик удален из курса
  • Новый урок опубликован в курсе
  • Ученик сменил тариф
  • Ученик оплатил тариф
  • Доступ ученика к курсу истек
  • Домашнее задание проверено учителем
  • Домашнее задание отправлено учеником
  • Live урок стартовал
Информация про Webhook на сайте CoreApp
Подключение веб-хуков https://help-ru.coreapp.ai/webhooks
Рассмотрим основные события
Триггеры на стороне CoreApp:
  1. Присоединение пользователя к курсу.
  1. Пользователь начал урок.
  1. Пользователь завершил урок.
  1. Ученик удален из курса.
  1. Доступ ученика к курсу истек.
  1. Новый урок опубликован в курсе.
События на стороне Unisender:
  1. Добавить пользователя в список рассылки.
  1. Отправить пользователю одиночное письмо.
  1. Удалить пользователя из списка рассылки.
  1. Создать список рассылки.
Информация про Webhook на сайте CoreApp и интеграция с Unisender
Подключение веб-хуков https://help-ru.coreapp.ai/webhooks
Добавление пользователя в список рассылки
В общем виде запрашиваемый URL выглядит следующим образом:
где API_KEY — ключ API вашего аккаунта Unisender. Сгенерировать API-ключ можно в настройках аккаунта в разделе «Интеграции».
LIST_ID — id списка(ов) рассылки, который уже создан в Unisender и в который будут добавлены все участники курса.
Как найти LIST_ID в Unisender
№2. LIST_ID в Unisender
где API_KEY — 5ie89ffq74t4chne6nx6jp6n7uyd4ayg5x7an4iap;
LIST_ID — 20670597.
Что важно при тестировании Webhook на сайте Vikunja
  • Работает через HTTP POST-запросы.
  • Vikunja поддерживает выбор событий и подпись HMAC

    HMAC (Hash-based Message Authentication Code) – это метод, используемый для проверки подлинности и целостности данных, который использует секретный ключ и криптографическую хэш-функцию. Он обеспечивает гарантию того, что сообщение, передаваемое или хранящееся в ненадёжной среде, не было изменён или подделываемо. HMAC применяется в различных областях, где требуется защита данных, таких как HTTPS для обеспечения безопасности веб-соединений, IPsec для защиты данных, передаваемых через интернет, и в API для подтверждения подлинности и целостности передаваемых данных.
Как работает Webhook в Vikunja
  • Настройка URL и событий.
  • Отправка payload в формате JSON.
  • Возможность подписывать секретом (HMAC).
Как создать веб-хук вручную в интерфейсе Vikunja
  1. Открыть проект
  1. В меню проекта выбрать "Webhooks"
  1. Ввести URL, на который будут приходить события
  1. (Опционально) Указать secret, чтобы проверять подлинность
  1. Выбрать события, которые должен отслеживать веб-хук
  1. Сохранить
Также есть возможность создать веб-хук через API, подробнее — в официальной документации Vikunja API.
Поддерживаемые события для проекта на сайте Vikunja
Выбранные события для задач проекта на сайте Vikunja
Нажать на кнопку "Create Webhook"
Практика: Создание Webhook для проекта
Webhook в Vikunja - X-Vikunja-Signature с HMAC-подписью
Подпись (Signing)
Vikunja позволяет указать секрет (secret) при создании вебхука. Если вы зададите секрет, все исходящие запросы вебхука будут содержать заголовок X-Vikunja-Signature с HMAC-подписью, вычисленной по JSON-пейлоаду вебхука.
Подробнее о том, как валидировать HMAC-подпись, можно узнать на сайте webhooks.fyi.
Как получить значение для тестирования
Чтобы протестировать подпись:
Укажите секрет при создании вебхука — это строка, которая будет использоваться для создания HMAC (создать от себя).
Получите JSON-пейлоад, который Vikunja отправляет в теле запроса вебхука.
Сформируйте подпись вручную для сравнения:
  • Используйте HMAC с алгоритмом SHA256.
  • Ключ — это ваш секрет (mysecretkey123).
  • Сообщение — это сырой JSON-пейлоад.
  • Результат — hex-строка, которая и будет значением в заголовке X-Vikunja-Signature.
Сценарий Webhook в Vikunja - Тестирование в Postman
register
  • POST Register - Регистрация нового пользователя
login
  • POST Login - Авторизация пользователя и получение токена
projects
  • PUT Creates a new project - Создание нового проекта
  • POST Create a webhook - Создание вебхука в проекте:
  • Event: task.created
  • Secret: testsecret123 (любой, но обязательно сохранить)
tasks
  • PUT Create a task - Создание задачи в созданном проекте — срабатывает вебхук
Проверка
  • Переход в Webhook.site и проверка:
  • Получение запроса
  • Есть ли заголовок X-Vikunja-Signature
  • Содержимое пейлоада
Тестирование Webhook в Vikunja через Postman (детали)
  • Указать secret при создании вебхука Указать любое значение строки secret (например, testsecret123) в теле запроса к API Vikunja при создании вебхука.
  • Скопировать уникальный URL с сервиса для приёма вебхуков Получить URL на сайте webhook.site или аналогичном.
  • Задать URL и secret в параметрах вебхука Передать в параметрах запроса:
{
"project_id": {{project_id}}, "
secret": "testsecret123",
"target_url": "unknown link,
"events":
[ "task.deleted", "task.created", "task.updated"]
}
  • Инициировать событие, вызывающее вебхук Создать задачу или другое событие, на которое подписан вебхук.
  • Проверить заголовок X-Vikunja-Signature Перейти на webhook.site, найти запрос, скопировать значение заголовка X-Vikunja-Signature.
  • Скопировать тело запроса в точном виде (без форматирования)
  • Получить исходный JSON-пейлоад вебхука (raw), сохранить как строку.
Создание задачи task в проекте через Postman (детали)
Инициировать событие, вызывающее вебхук. Создать задачу или другое событие, на которое подписан вебхук.
Проверка Webhook после создания задачи task
Проверить заголовок X-Vikunja-Signature. Перейти на webhook.site, найти запрос, скопировать значение заголовка X-Vikunja-Signature или сохранить для сверки.
Проверка Webhook после создания задачи task
Скопировать тело запроса в точном виде (без форматирования) Получить исходный JSON-пейлоад вебхука (raw), сохранить как строку.
  • В поле "Input String" — вставить raw JSON
  • В поле "Secret Key" — вставить свой secret
  • Выбрать: Hash Algorithm: SHA-256
  • Нажать Compute HMAC
  • Сравнить со значением заголовка X-Vikunja-Signature
Безопасность и защита инфраструктуры
Vikunja поддерживает интеграцию с прокси mole для отправки веб-хуков — это позволяет обезопасить инфраструктуру от SSRF-атак (сервер сам делает запросы внутрь вашей сети).
Если Vikunja используется не только вами, рекомендуется настроить mole и фильтрацию исходящих запросов.
Подробнее об этом — на webhooks.fyi.
Плюсы и минусы веб-хуков
Плюсы веб-хуков:
  • Реакция в реальном времени
  • Уменьшение количества ручных запросов
  • Простота интеграции между сервисами
  • Асинхронность: веб-хуки позволяют избежать необходимости постоянных запросов к источнику данных.
  • Оповещения в реальном времени: система-приемник получает информацию о событиях практически сразу после их наступления.
  • Простота интеграции: веб-хуки позволяют интегрировать различные системы без необходимости постоянного взаимодействия.
  • Еще примеры использования: интерфейс администратора интернет-магазина и веб-хуки могут уведомлять администратора о новых заказах, отмене заказа, или изменении статуса доставки.
Минусы веб-хуков:
  • Возможные потери событий при сбоях
  • Требуется контроль безопасности (например, HMAC-подпись)
В чем разница между веб-хуками и обычным API?
  • API - это стандартный способ взаимодействия между различными приложениями, где запрос и ответ осуществляются по запросу одной из сторон.
  • API используется для активного запроса и управления данными
Веб-хуки:
  • Веб-хуки - это асинхронный способ, где система-источник сама отправляет информацию о событии, не ожидая запроса от системы-приемника.
  • Вебхуки применяют для получения уведомлений о событиях в режиме реального времени
Курс и вебинары о подготовке на собеседования по тестированию ПО
  • О курсе: Полезные тесты с интерактивом для закрепления знаний! Курс охватывает ключевые темы для успешного прохождения собеседований, включая теоретические основы и практические задания. Вы сможете систематизировать свои знания и выявить слабые места.
  • Детали покупки: Промокод PROMO10 - 10% скидка на все тарифы
    Продажи с 15 июня по 29 июня 2025г
    Есть рассрочка, оплата частями для РФ и оплата из разных стран. Мы предлагаем гибкие варианты оплаты для вашего удобства. После покупки обновите страницу с курсом в течении 3-5 минут для активации доступа.
  • Поддержка и доступ: По всем вопросам вы можете написать в телеграм @nadin_qa. ВАЖНО для прошлых потоков: если необходимо продлить доступ, то для вас будет промокод в зависимости от выполненных заданий. Напишите @nadin_qa, указав адрес электронной почты, использованной при регистрации, для получения индивидуального предложения.
  • Сертификация: При выполнении всех заданий будет выдан сертификат (есть на английском и русском языках). Этот сертификат подтверждает ваши компетенции и может быть отличным дополнением к вашему резюме, повышая вашу ценность на рынке труда. Он выдается автоматически после успешного завершения всех модулей.
  • Бонус вебинара: При покупке курса до 23 июня - 2 месяца дополнительно. Это значит, что вы получите расширенный доступ ко всем материалам курса, включая новые обновления и дополнительные материалы, которые будут добавлены в течение этого периода. Не упустите шанс получить больше времени для углубленного изучения и практики!
Курс по подготовке на собеседования по тестироанию ПО

coreapp.ai

Онлайн курс по подготовке на собеседования и тесты по тестированию ПО

Данная проверка необходима для закрепления знаний и для подготовки на собеседования на позицию "Инженера по тестированию ПО". Подробности про тарифы на https://protestinginfo.ru/

Только вебинары

coreapp.ai

Вебинары из онлайн-курса по подготовке на собеседования по тестированию ПО

Курс по тестированию бэкенда
  1. Выполнение тестирования API + Составление тестовой документации (TMS DoQA)
  1. Введение и организация работы
  1. Подготовка к выполнению тестирования — Инструменты и окружение
  1. Автоматизация коллекции и запуск — бонусный модуль
  1. Живые встречи и вебинары
  1. Контрольные задания и сдача работы
  1. Работа с брокером сообщений Kafka — бонусный модуль
  1. Отзыв и завершение курса

coreapp.ai

Онлайн курс по тестированию бэкенда

Ваши вопросы
Спасибо за внимание
Оставьте свой отзыв, отметив меня в нельзяграм, линкедин
Свои вопросы пишите на @nadin_qa
Made with