DTO应该包含嵌入式实体,还是应该返回仅具有ID的“固定” DTO?

时间:2019-09-27 15:34:47

标签: rest mapping api-design dto

过去,我的DTO一直是该实体的直接地图。但是,我现在处在一个场景中,我们真正需要的只是嵌套对象的ID,因此我们可以根据需要进行数据库查找。看起来像这样

public class UserDto {
    Integer id;
    String name;
    List<Integer> groupIds;
}

但是实体看起来像这样

public class UserEntity {
    Integer id;
    String name;
    List<UserGroupEntity> userGroups;    
}

这是常见的做法吗?我是否应该直接从实体映射DTO并嵌入UserGroup DTO?

1 个答案:

答案 0 :(得分:1)

我通常会选择选项1,只包括其他实体的ids。否则,DTO可能在一段时间后变得become肿,从而导致许多不必要的数据库查找。

如果DTO没有包含实体就没有任何意义,我只会选择第二种选择。但这几乎绝不是这种情况,并且假设您知道DTO的所有未来用户希望拥有的信息是困难而危险的。


在API端点设计方面(假设您选择方法一),您可以通过调用以下端点来让客户端获取UserUserGroup

/users/:id
/users/:id/usergroups

这是为了使客户端不必在提取User之前等待UserGroup提取完成。这遵循RESTful原则,例如从客户端并行完成。