Кейс: статусы посылок от службы доставки
Вопрос
Интернет-магазин подключает службу доставки. Нужно показывать клиенту актуальный статус посылки. Служба умеет и API для запроса статуса, и вебхуки. Как спроектируешь получение статусов?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Основной канал: вебхуки, запасной: периодический опрос API по незавершённым посылкам
Маппинг статусов службы в свою статусную модель
Идемпотентность и защита от устаревших событий
Проверка подписи вебхука
Уведомления клиента только на значимые статусы
Что могут спросить следом
- Как часто опрашивать API?
- Что делать со статусами, которых нет в нашей модели?
Разбор
Основной канал вебхуки: служба сама сообщает о смене статуса, это быстро и не тратит лимиты. Но вебхуки теряются, поэтому раз в несколько часов опрашиваю API по посылкам в незавершённых статусах. Статусы службы сопоставляю со своей моделью: у них может быть двадцать статусов, клиенту нужны пять, неизвестные логирую и не показываю. Каждое событие проверяю по подписи, обрабатываю идемпотентно и не откатываю статус назад, если пришло событие старше текущего. Клиенту отправляю уведомления только на значимые изменения: передана курьеру, ждёт в пункте выдачи, вручена.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Кейс: интеграция с SOAP-сервисом банка-партнёра
Следующий вопрос
Выбор протокола для внутреннего вызова
Ещё по теме «gRPC, SOAP и другие протоколы»
- Виды вызовов gRPC
- REST и SOAP
- Надёжный приём вебхуков
- Когда GraphQL
- gRPC из браузера
- На чём работает gRPC
- Ситуация и способ интеграции
- Номера полей в protobuf