Вчера разбирали задачу:
«Нужно просто добавить кнопку “Отменить заказ”».
Сегодня — что я бы спросил у продакта до того, как открывать Swagger, рисовать Sequence Diagram и думать про API.
Первый вопрос вообще не технический:
1. В какой момент заказ ещё можно отменить?
Пока он создан?
Пока не оплачен?
Пока не собран?
Пока не передан в доставку?
Потому что «отмена заказа» на разных этапах — это уже несколько разных сценариев.
Дальше:
2. Что происходит с оплатой?
Если заказ уже оплачен — мы делаем автоматический refund?
Сразу?
После подтверждения отмены?
А если платёжный сервис не ответил?
3. Можно отменить весь заказ или отдельный товар?
Потому что частичная отмена сразу делает задачу интереснее.
4. Что происходит с товаром на складе?
Если товар уже зарезервирован — снимаем резерв.
Если его уже начали собирать — возможно, нужен совсем другой процесс.
5. Кто вообще может отменить заказ?
Покупатель?
Продавец?
Поддержка?
Администратор?
И одинаковые ли у них правила?
6. Что увидит пользователь после отмены?
Просто статус CANCELLED?
Или ещё:
— причину отмены;
— информацию о возврате денег;
— срок возврата;
— уведомление.
И один из моих любимых вопросов:
7. А что должно произойти, если что-то пошло не так?
Например:
Order Service отменил заказ.
А Payment Service не смог вернуть деньги.
Какой статус заказа показываем пользователю?
Вот здесь обычно и заканчивается история про «просто кнопку».
---
У меня есть простое правило:
сначала разбираемся с бизнес-сценарием и исключениями, и только потом проектируем API.
Иначе очень легко красиво спроектировать не то.
Завтра попробуем из этих требований собрать сам процесс отмены заказа и нарисовать Sequence Diagram.
«Нужно просто добавить кнопку “Отменить заказ”».
Сегодня — что я бы спросил у продакта до того, как открывать Swagger, рисовать Sequence Diagram и думать про API.
Первый вопрос вообще не технический:
1. В какой момент заказ ещё можно отменить?
Пока он создан?
Пока не оплачен?
Пока не собран?
Пока не передан в доставку?
Потому что «отмена заказа» на разных этапах — это уже несколько разных сценариев.
Дальше:
2. Что происходит с оплатой?
Если заказ уже оплачен — мы делаем автоматический refund?
Сразу?
После подтверждения отмены?
А если платёжный сервис не ответил?
3. Можно отменить весь заказ или отдельный товар?
Потому что частичная отмена сразу делает задачу интереснее.
4. Что происходит с товаром на складе?
Если товар уже зарезервирован — снимаем резерв.
Если его уже начали собирать — возможно, нужен совсем другой процесс.
5. Кто вообще может отменить заказ?
Покупатель?
Продавец?
Поддержка?
Администратор?
И одинаковые ли у них правила?
6. Что увидит пользователь после отмены?
Просто статус CANCELLED?
Или ещё:
— причину отмены;
— информацию о возврате денег;
— срок возврата;
— уведомление.
И один из моих любимых вопросов:
7. А что должно произойти, если что-то пошло не так?
Например:
Order Service отменил заказ.
А Payment Service не смог вернуть деньги.
Какой статус заказа показываем пользователю?
Вот здесь обычно и заканчивается история про «просто кнопку».
---
У меня есть простое правило:
сначала разбираемся с бизнес-сценарием и исключениями, и только потом проектируем API.
Иначе очень легко красиво спроектировать не то.
Завтра попробуем из этих требований собрать сам процесс отмены заказа и нарисовать Sequence Diagram.