学会用 Markdown 绘制时序图
时序图(Sequence Diagram)是 UML(统一建模语言)中的一种重要图表类型,用于描述对象之间的交互过程,展示消息在时间轴上的传递顺序。在 Markdown 中,我们可以使用 Mermaid
语法来创建专业的时序图,这对于系统设计、API 文档、业务流程分析等场景非常有用。
什么是时序图
时序图是一种交互图,它展示了系统中不同对象或参与者之间按时间顺序进行的交互过程。时序图的主要特点包括:
- 时间轴:垂直方向表示时间流逝
- 参与者:水平方向表示不同的对象或角色
- 消息传递:箭头表示对象间的消息传递
- 生命线:显示对象的生命周期
Mermaid 时序图语法
基本语法结构
在 Markdown 中使用 Mermaid 创建时序图,需要使用代码块并指定语言为 mermaid
:
```mermaid
sequenceDiagram
participant A as 用户
participant B as 系统
A->>B: 发送请求
B-->>A: 返回响应
```
效果:
参与者定义
语法 | 描述 | 示例 |
---|---|---|
participant A | 定义参与者 | participant A as 用户 |
actor A | 定义外部参与者 | actor A as 管理员 |
autonumber | 自动编号 | autonumber |
示例:不同类型的参与者
```mermaid
sequenceDiagram
autonumber
actor 用户
participant 前端
participant 后端
participant 数据库
用户->>前端: 点击登录
前端->>后端: 发送登录请求
后端->>数据库: 验证用户信息
数据库-->>后端: 返回用户数据
后端-->>前端: 返回登录结果
前端-->>用户: 显示登录状态
```
效果:
消息类型
基本消息类型
消息类型 | 语法 | 描述 | 示例 |
---|---|---|---|
同步消息 | ->> | 实线箭头,表示同步调用 | A->>B: 同步请求 |
异步消息 | ->> | 实线箭头,表示异步调用 | A->>B: 异步请求 |
返回消息 | -->> | 虚线箭头,表示返回 | B-->>A: 返回结果 |
自调用 | ->> | 对象调用自身方法 | A->>A: 内部处理 |
消息样式
样式 | 语法 | 描述 |
---|---|---|
实线箭头 | ->> | 默认样式 |
虚线箭头 | -->> | 返回消息 |
示例:不同消息类型
```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务器
A->>B: 同步请求
B-->>A: 同步响应
A->>B: 异步请求
B-->>A: 重要通知
A->>B: 失败请求
B-->>A: 错误返回
```
效果:
激活和停用
激活生命线
使用 activate
和 deactivate
来显示对象的激活状态:
```mermaid
sequenceDiagram
participant A as 用户
participant B as 控制器
participant C as 服务层
A->>B: 请求处理
activate B
B->>C: 调用服务
activate C
C-->>B: 返回结果
deactivate C
B-->>A: 返回响应
deactivate B
```
效果:
实际应用示例
1. 用户注册流程
```mermaid
sequenceDiagram
autonumber
actor 用户
participant 前端 as 前端页面
participant API as API网关
participant 认证服务 as 认证服务
participant 数据库 as 用户数据库
participant 邮件服务 as 邮件服务
用户->>前端: 填写注册信息
前端->>API: 提交注册请求
API->>认证服务: 验证用户信息
认证服务->>数据库: 检查用户是否存在
数据库-->>认证服务: 用户不存在
认证服务->>数据库: 创建新用户
数据库-->>认证服务: 用户创建成功
认证服务->>邮件服务: 发送验证邮件
邮件服务-->>认证服务: 邮件发送成功
认证服务-->>API: 注册成功
API-->>前端: 返回成功信息
前端-->>用户: 显示注册成功
```
效果:
2. 在线支付流程
```mermaid
sequenceDiagram
autonumber
actor 用户
participant 商城 as 商城系统
participant 支付网关 as 支付网关
participant 银行 as 银行系统
participant 物流 as 物流系统
用户->>商城: 提交订单
商城->>支付网关: 发起支付请求
支付网关->>银行: 验证支付信息
银行-->>支付网关: 支付成功
支付网关-->>商城: 支付确认
商城->>物流: 创建物流订单
物流-->>商城: 物流订单创建成功
商城-->>用户: 订单确认
物流->>用户: 发送物流信息
```
效果:
3. 微服务架构交互
```mermaid
sequenceDiagram
autonumber
participant 客户端 as 客户端
participant 网关 as API网关
participant 用户服务 as 用户服务
participant 订单服务 as 订单服务
participant 库存服务 as 库存服务
participant 数据库 as 数据库集群
客户端->>网关: 获取用户订单
网关->>用户服务: 验证用户身份
用户服务->>数据库: 查询用户信息
数据库-->>用户服务: 返回用户数据
用户服务-->>网关: 用户验证通过
网关->>订单服务: 查询用户订单
订单服务->>数据库: 查询订单数据
数据库-->>订单服务: 返回订单信息
订单服务->>库存服务: 查询库存状态
库存服务->>数据库: 查询库存信息
数据库-->>库存服务: 返 回库存数据
库存服务-->>订单服务: 返回库存状态
订单服务-->>网关: 返回完整订单信息
网关-->>客户端: 返回订单数据
```
效果:
高级功能
1. 循环和条件
```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务器
A->>B: 开始批量处理
loop 处理每个项目
A->>B: 发送数据项
B->>B: 处理数据
alt 处理成功
B-->>A: 返回成功
else 处理失败
B-->>A: 返回错误
end
end
A->>B: 完成批量处理
B-->>A: 处理完成
```
效果:
2. 并行处理
```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务A
participant C as 服务B
participant D as 服务C
A->>B: 请求数据A
A->>C: 请求数据B
A->>D: 请求数据C
par 并行处理
B-->>A: 返回数据A
and
C-->>A: 返回数据B
and
D-->>A: 返回数据C
end
A->>A: 合并数据
```
效果:
3. 注释和分组
```mermaid
sequenceDiagram
participant A as 用户
participant B as 前端
participant C as 后端
participant D as 数据库
Note over A,D: 用户登录流程开始
A->>B: 输入用户名密码
B->>C: 发送登录请求
Note over C,D: 后端验证阶段
C->>D: 查询用户信息
D-->>C: 返回用户数据
C->>C: 验证密码
alt 验证成功
C-->>B: 返回登录成功
B-->>A: 跳转到主页
else 验证失败
C-->>B: 返回登录失败
B-->>A: 显示错误信息
end
Note over A,D: 用户登录流程结束
```
效果: