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

Кейс: статусы посылок от службы доставки

Вопрос

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

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

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

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

Коротко

Основной канал вебхуки: служба сама сообщает о смене статуса, это быстро и не тратит лимиты. Но вебхуки теряются, поэтому раз в несколько часов опрашиваю API по посылкам в незавершённых статусах.

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

  • Основной канал: вебхуки, запасной: периодический опрос API по незавершённым посылкам

  • Маппинг статусов службы в свою статусную модель

  • Идемпотентность и защита от устаревших событий

  • Проверка подписи вебхука

  • Уведомления клиента только на значимые статусы

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

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

Разбор

Основной канал вебхуки: служба сама сообщает о смене статуса, это быстро и не тратит лимиты. Но вебхуки теряются, поэтому раз в несколько часов опрашиваю API по посылкам в незавершённых статусах. Статусы службы сопоставляю со своей моделью: у них может быть двадцать статусов, клиенту нужны пять, неизвестные логирую и не показываю. Каждое событие проверяю по подписи, обрабатываю идемпотентно и не откатываю статус назад, если пришло событие старше текущего. Клиенту отправляю уведомления только на значимые изменения: передана курьеру, ждёт в пункте выдачи, вручена.

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

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