让我们考虑一个简单的
UserDTO
:
public record UserDTO(string Id, string Username);
这意味着在 Swagger UI 中,对于
POST
请求,会询问 Id
和 Username
,但不会使用 Id
。也许这会让客户感到困惑。
另一方面,对于
GET
请求,它可能很有用。
避免这种混乱的正确方法是什么?
Username
字符串作为 POST
参数(这里可以,但可能会因为 10 个属性而变得混乱);POST
和 GET
(大量冗余);谢谢。
只需为不同的端点创建单独的 DTO。
不要害怕创建更多类型,即使它们之间存在一些重复。稍后您始终可以导出常见的抽象。
DTO 根据定义是关于传输数据的,因此它应该完全依赖于您要传输的数据。在大多数情况下,对具有不同目的的不相关端点使用相同的 DTO 是没有意义的。即使某些字段在不同端点中相同,也会建议使用特定的 DTO,不要考虑这种代码重复。
例如,在基本
GET
端点中,您想要通过 ID 检索项目,只需要 ID,因此您甚至可以跳过使用 DTO,并让端点接受单个 id
参数。
对于更复杂的 GET
端点,允许您过滤、排序、分页等。包含所有这些条件的 DTO 可能会很有用。
在
POST
方面,如果您在服务器中生成ID(如果您将项目存储在某个数据库中,则可能应该这样做),则不需要从客户端发布该字段。如果您的 DTO 中有这样一个字段,客户会感到困惑,因为您会忽略它!