Как надёжно принимать вебхуки
Вопрос
Как спроектировать надёжный приём вебхуков от внешнего сервиса?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Проверка подлинности: подпись, mTLS или повторный запрос к API
Идемпотентность по id события, дубли возможны
Быстрый ответ 2xx, обработка в фоне через очередь
Не полагаться на порядок, проверять актуальность по времени или версии
Сверка по расписанию на случай потерянных событий
Что могут спросить следом
- Что будет, если вы отвечаете 500 на вебхук?
- Как тестировать вебхуки до продакшена?
Разбор
Сначала подлинность: проверяю подпись по секрету или сертификату, а для критичного, как оплата, запрашиваю статус у провайдера по API. Вебхук может прийти несколько раз, поэтому обработка идемпотентна: храню id события и на повтор ничего не меняю. Отвечаю 200 быстро, а саму обработку кладу в очередь, иначе провайдер увидит таймаут и будет слать повторы. Порядок событий не гарантирован, поэтому сравниваю время или версию и не откатываю статус назад. И обязательно сверка по расписанию: если вебхук потерялся, состояние подтянется через API.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.