Содержание
- 2. Меня хорошо слышно && видно?
- 3. Карта вебинара Кейс Response-reply и message-based протоколы Синхронное и асинхронное взаимодействие Оркестрация и хореография Anemic и
- 4. Пользовательский сценарий Есть авторизованный клиент И есть интернет-магазин "Гозон" И клиент вводит в строке поиска "Красный
- 5. Пользовательский сценарий Когда клиент нажимает карточку на товар Тогда клиент переходит на страничку с описанием товара
- 6. Пользовательский сценарий Когда клиент нажимает на кнопку "Добавить товар в корзину" Тогда товар добавляется в корзину
- 7. Пользовательский сценарий Когда клиент переходит в корзину Тогда он видит список всех добавленных в корзину товаров
- 8. Пользовательский сценарий Когда клиент нажимает на кнопку "оформить заказ" Тогда появляется форма оформления заказа, которая предлагает
- 9. Пользовательский сценарий Когда клиент выбирает место доставки, способ оплаты, и переходит к оплате Тогда возникает форма
- 10. Пользовательский сценарий Когда клиент оплачивает заказ Тогда появляется окно "заказ оплачен" И клиенту приходит сообщение на
- 11. Event storming Отражаем на доске бизнес процесс в виде набора стикеров
- 12. Event storming https://miro.com/app/board/o9J_kvo2lAo=/
- 13. Bounded-context Как протестировать bounded ли context? Если поменять внутреннюю бизнес-логику, придется ли менять логику в других
- 14. Bounded-context
- 15. Нулевая итерация bounded-context = сервис прописываем функции предметной области внутри контекста превращаем команды/действия в API методы
- 16. Нулевая итерация Поиск товара поиск товара по выбранным параметрам поиск по каталогу каталог параметров поиска Карточка
- 17. API first design Поиск товара GET /api/v1/search/product_search/?q=Красный самокат&limit=20 GET /api/v1/search/product_catalog/?category_id=23&subcategory_id=43&q=Красный самокат GET /api/v1/search/catalog_filters/?category_id=42 Карточка товара GET
- 18. Какие методы еще нужны исходя из сценария? Формирование корзины GET /api/v1/cart/products/ - забыли получить все продукты
- 19. Какие методы еще нужны исходя из сценария? Какие данные о продукте возвращают методы? GET /api/v1/search/product_search/?q=Красный самокат&limit=20
- 20. Корзина – это тоже самое, что и заказ? Формирование корзины и оформление заказа кажется, что про
- 21. Нужен ли отдельный сервис оплаты? Что будет, если из сервиса Заказов сразу ходить во внешний сервис?
- 22. Как связать сервис оплаты и сервис заказов? Что будет, если мы сделаем прослойку в виде Сервиса
- 23. Как связать сервис оплаты и сервис заказов? Что будет, если мы сделаем очередь событий «Произошла оплата»?
- 24. Как связать сервис заказов и сервис доставки? Когда оплата завершилась, нам надо еще 1) послать уведомление
- 25. Как связать сервис заказов и сервис доставки? Сервис Заказов явным образом (синхронно) ходит во все остальные
- 26. Как связать сервис заказов и сервис доставки? Сервис Заказов публикует сообщение, что заказ оплачен, а остальные
- 27. Промежуточный итог
- 28. Рекомендации 1. Начинайте с основного пользовательского сценария 2. Пробуйте использовать технику event storming 3. Используйте декомпозицию
- 29. Request-reply протоколы взаимодействия Request-reply - протоколы, в которых клиент посылает запрос, сервис обрабатывает и отправляет ответ
- 30. Message-based протоколы взаимодействия Message-based - протоколы, в которых клиент отправляет сообщение через брокер сообщений, а сервис
- 31. Request-response vs message based Request-response: Проще дебаг и ловля ошибок Latency лучше Message based Дебаг зачастую
- 32. Синхронное и асинхронное взаимодействие Синхронное взаимодействие – клиент ждет ответа от сервиса Асинхронное взаимодействие – клиент
- 33. Синхронное и асинхронное взаимодействие
- 34. Оркестрация и хореография
- 35. Оркестрация Оркестрация – один сервис координирует весь бизнес-процесс
- 36. Хореография Хореография – сервисы координируются между собой за счет асинхронного взаимодействия и событийной модели
- 37. Оркестрация vs хореография Оркестрация дает четкое понимание, что происходит и как выглядит бизнес процесс Оркестрация может
- 38. Требования к API Менять API со сломом обратной совместимости – очень больно. API должен быть расширяем
- 39. Семантическое версионирование API http://semver.org MAJOR.MINOR.PATCH MAJOR – изменения без обратной совместимости MINOR – улучшения API с
- 40. REST vs RPC REST API – это набор ресурсов, которые представляют сущности предметной области и HTTP
- 41. REST Модель зрелости Richardson Протокол Odata (https://www.odata.org/) плюсы: Простой для дебага и реализации Максимально использует инфраструктуру
- 42. RPC SOAP, gRPC плюсы: Хорошо подходят для сложной бизнес-логики Богатый язык описания контрактов минусы Поддержка языком
- 43. REST vs RPC В целом сам по себе протокол взаимодействия (RESTful или RPC) не влияет на
- 44. Datacentric API vs rich API Есть сервис обработки тикетов и в нем есть ресурс - /api/v1/tickets/{ticket_id}.json
- 45. Datacentric API vs rich API Есть сервис обработки тикетов и в нем есть ресурс - /api/v1/tickets/{ticket_id}.json
- 46. Datacentric API vs rich API Если изменение какого-то поля в рамках CRUD-методов API — это не
- 47. Datacentric API vs rich API Вместо универсального ресурса /api/v1/tickets.json добавить еще ресурсы-глаголы: POST /api/v1/tickets/{ticket_id}/migrate.json — смигрировать
- 48. Datacentric API vs rich API Вместо универсального ресурса /api/v1/tickets.json добавить еще ресурсы сущности: POST /api/v1/tickets/migrations.json POST
- 49. Datacentric API vs rich API Проблема касается не только REST-like, но и RPC итерфейсы editTicket() или
- 50. Опрос https://otus.ru/polls/6404/
- 52. Скачать презентацию