传入和传出 DTO 的最佳实践

Gar*_*ias 4 java rest api-design

我面临 API 设计问题。考虑以下流程:

流动

正如您所看到的,我有 2 个类来代表我的模型(SomethingDTOSomethingResponse),还有 2 个类来代表第 3 方模型(3rdPartyRequest3rdPartyResponse)。我正在使用映射器提供从 3rdPARty 模型类到我的模型类的转换。

问题是:这 4 个类都具有完全相同的属性。

我应该在所有这些类中重复这些属性吗?我应该在整个流程中只使用一个 DTO 类吗?

解决这个问题的最佳实践(或模式)是什么?

谢谢

cas*_*lin 5

正如我之前回答的那样,使用 DTO 有助于将持久性模型与 API 模型解耦。所以你似乎在做正确的事。

问题是:这 4 个类都具有完全相同的属性。

将 API 模型与第三方 API 模型解耦始终是一个好主意。如果第三方 API 更改合同,您也不会破坏您的客户。因此,为每个 API 使用不同的模型。

并坚持使用映射框架,例如MapStruct,以减少样板代码。您可能还想考虑使用Lombok为您生成 getter、setter、equals()hashcode()方法toString()

我应该在所有这些类中重复这些属性吗?我应该在整个流程中只使用一个 DTO 类吗?

如果请求和响应模型都包含相同的字段集,那么您可以从一个类开始,用于表示每个API 的请求和响应负载。当字段开始不同(请求有效负载与响应有效负载不同)时,您可以创建新模型来表示每个有效负载。

从长远来看,对请求和响应使用不同的模型将为您提供灵活性,确保您仅公开和接收您想要的属性。