← Системный анализ: API, интеграции и данные
Урок
Sequence-диаграмма: кто кого вызывает и в каком порядке
Прочитать и составить sequence-диаграмму сценария «оформление и оплата заказа»: участники, синхронные и асинхронные сообщения, ответы и альтернативные ветки (alt).
Как читать диаграмму последовательности
Кто кого вызывает и когда
Диаграмма последовательности (sequence, UML 2.5.1) показывает один сценарий во времени. Участники стоят сверху в ряд, от каждого вниз идёт линия жизни — вертикальный пунктир. Время течёт сверху вниз, сообщения — горизонтальные стрелки между линиями. Узкий прямоугольник на линии жизни (активация) значит, что участник сейчас занят. Виды стрелок и фрагменты-рамки — в таблице ниже.
Webhook — тоже синхронный HTTP-вызов, только начинает его провайдер: стрелка идёт от провайдера к нам, наш ответ 200 — пунктиром назад. Событие в брокер — асинхронное сообщение: отправили и не ждём, получатели читают брокер сами.
Разберём сценарий со схемы ниже. Приложение вызывает POST /orders. Сервис заказов просит провайдера создать платёж и получает ссылку на оплату — только теперь ему есть что вернуть: 201 со ссылкой. Клиент платит по ссылке, и лишь после этого провайдер присылает webhook. Получив его, сервис публикует событие: OrderPaid, а в ветке отказа — OrderCancelled. Каждый шаг ждёт предыдущего, поэтому порядок один.
Зачем это аналитику. Каждая стрелка между системами — метод API или событие; её сверяют с реестром интеграций (урок 1.3) и контрактами. Стрелка без строки в реестре — пропуск: его выясняют у команды и дописывают в реестр и контракт. Участники — системы, как на контекстной диаграмме: таблицы базы сюда не выносят. Отказ провайдера — не сбой, а ответ: его не повторяют в loop, а рисуют отдельной веткой alt.
Стрелки и фрагменты
| Элемент | Смысл |
|---|---|
| Сплошная линия, закрашенная стрелка | Синхронный вызов: отправитель ждёт ответа |
| Сплошная линия, открытая стрелка | Асинхронное сообщение: отправитель не ждёт |
| Пунктирная линия | Ответ на вызов |
| alt | Взаимоисключающие ветки, у каждой условие в скобках: [оплата прошла] / [оплата отклонена] |
| opt | Шаги выполняются, только если условие истинно |
| loop | Повторение шагов |
| ref | Ссылка на другую диаграмму |
Как составить диаграмму
- 1Участники
Слева направо — в порядке вступления в сценарий
- 2Основной сценарий
Вызовы и события сверху вниз, как идёт время
- 3Ответы
Пунктиром к тому, кто вызывал
- 4Отказы
Фрагмент alt с условием на каждой ветке
- 5Сверка
Каждая стрелка — строка в реестре интеграций и контракт
Конспект урока
Кто кого вызывает и когда
Диаграмма последовательности (sequence, UML 2.5.1) показывает один сценарий во времени. Участники стоят сверху в ряд, от каждого вниз идёт линия жизни — вертикальный пунктир. Время течёт сверху вниз, сообщения — горизонтальные стрелки между линиями. Узкий прямоугольник на линии жизни (активация) значит, что участник сейчас занят. Виды стрелок и фрагменты-рамки — в таблице ниже.
Webhook — тоже синхронный HTTP-вызов, только начинает его провайдер: стрелка идёт от провайдера к нам, наш ответ 200 — пунктиром назад. Событие в брокер — асинхронное сообщение: отправили и не ждём, получатели читают брокер сами.
Разберём сценарий со схемы ниже. Приложение вызывает POST /orders. Сервис заказов просит провайдера создать платёж и получает ссылку на оплату — только теперь ему есть что вернуть: 201 со ссылкой. Клиент платит по ссылке, и лишь после этого провайдер присылает webhook. Получив его, сервис публикует событие: OrderPaid, а в ветке отказа — OrderCancelled. Каждый шаг ждёт предыдущего, поэтому порядок один.
Зачем это аналитику. Каждая стрелка между системами — метод API или событие; её сверяют с реестром интеграций (урок 1.3) и контрактами. Стрелка без строки в реестре — пропуск: его выясняют у команды и дописывают в реестр и контракт. Участники — системы, как на контекстной диаграмме: таблицы базы сюда не выносят. Отказ провайдера — не сбой, а ответ: его не повторяют в loop, а рисуют отдельной веткой alt.