数据传输对象 (DTO)¶
在 Litestar 中,数据传输对象(DTO)是一个用于控制从客户端流入的数据转换为开发人员在其处理器中使用的有用形式,然后再返回的类。
下图演示了在 Litestar 中单个请求上下文中如何使用 DTO:
sequenceDiagram
autonumber
actor Client
participant Litestar
participant DTO
participant Handler
Client->>Litestar: 编码字节形式的数据
activate Litestar
Litestar->>DTO: 编码数据
deactivate Litestar
activate DTO
Note over DTO: 执行基本类型验证<br>并转换为数据模型
DTO->>Handler: 数据注入到处理器
deactivate DTO
activate Handler
Note over Handler: 处理器接收处理器签名中<br>声明的类型的数据<br>并执行业务逻辑
Handler->>DTO: 从处理器返回的数据
deactivate Handler
activate DTO
Note over DTO: 从处理器返回的数据<br>被转换为 Litestar<br>可以编码为字节的类型
DTO->>Litestar: Litestar 可编码类型
deactivate DTO
activate Litestar
Note over Litestar: 从 DTO 接收的数据<br>被编码为字节
Litestar->>Client: 编码字节形式的数据
deactivate Litestar
数据移动¶
以下是上图中每个参与者之间交互的简短摘要。
数据在 DTO 图表中的每个参与者之间移动,在移动过程中,对数据执行不同的操作,并且根据数据传输的方向和传输两端的参与者,它采用不同的形式。让我们看看每个数据移动:
客户端 → Litestar → DTO¶
从客户端以编码字节形式接收数据
在大多数情况下,未编码的字节直接传递给 DTO
例外是 multipart 和 URL 编码数据,在传递给 DTO 之前将其解码为 Python 内置类型
DTO → 处理器¶
DTO 从客户端接收数据
执行基本类型验证
将数据编组为处理器注解中声明的数据类型
处理器 → DTO¶
处理器接收处理器签名中声明的类型的数据
开发人员执行业务逻辑并从处理器返回数据
DTO → Litestar¶
DTO 从处理器接收数据
将数据编组为 Litestar 可以编码为字节的类型
Litestar → 客户端¶
从 DTO 接收数据作为 Litestar 可以编码为字节的类型
数据被编码为字节并发送到客户端