Ответ вслух Middle gRPC, SOAP и другие протоколы обновлено

Как надёжно принимать вебхуки

Вопрос

Как спроектировать надёжный приём вебхуков от внешнего сервиса?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

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

Что должно прозвучать в ответе

  • Проверка подлинности: подпись, mTLS или повторный запрос к API

  • Идемпотентность по id события, дубли возможны

  • Быстрый ответ 2xx, обработка в фоне через очередь

  • Не полагаться на порядок, проверять актуальность по времени или версии

  • Сверка по расписанию на случай потерянных событий

Что могут спросить следом

  • Что будет, если вы отвечаете 500 на вебхук?
  • Как тестировать вебхуки до продакшена?

Разбор

Сначала подлинность: проверяю подпись по секрету или сертификату, а для критичного, как оплата, запрашиваю статус у провайдера по API. Вебхук может прийти несколько раз, поэтому обработка идемпотентна: храню id события и на повтор ничего не меняю. Отвечаю 200 быстро, а саму обработку кладу в очередь, иначе провайдер увидит таймаут и будет слать повторы. Порядок событий не гарантирован, поэтому сравниваю время или версию и не откатываю статус назад. И обязательно сверка по расписанию: если вебхук потерялся, состояние подтянется через API.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.