我目前正在为一个项目创建REST-API,并且一直在阅读关于最佳实践的文章。许多人似乎反对dto,只是简单地公开域模型,而其他人似乎认为dto(或用户模型或任何您想要称呼它的东西)是不好的实践。就我个人而言,我认为这篇文章很有意义。
但是,我也理解dto的缺点,包括所有额外的映射代码、可能与dto对应物100%相同的领域模型等等。
我们的API主要是为了让其他客户端可以使用数据而创建的,但是如果我们做得对,我们也想在可能的情况下将其用于我们自己的web GUI。
问题是,我们可能不想向其他客户端用户公开所有的域数据。大部分数据只在我们自己的web应用程序中才有意义。此外,我们可能不希望在所有场景中公开关于一个对象的所有数据,特别是与其他对象的关系等等。例如,如果我们公开一个特定对象的列表,我们不一定要公开整个对象层次结构;这样对象的子对象就不会被暴露,而是可以通过链接(hateoas)被发现。
我该如何着手解决这个问题呢?我在考虑在我们的领域模型上使用Jackson mixins来控制在不同的场景下会暴露哪些数据。或者我们应该一直使用dto——即使考虑到它的缺点和争议?