【发布时间】:2017-03-11 18:05:52
【问题描述】:
我正在努力思考通过 REST API 将集合更新到另一个资源的最佳方法,并且正在寻找其他人如何看待这个过程的指导。
假设您与实体“父”(一)和“子”(多)之间存在多对一关系。我的想法是,您可以通过单个 PUT 端点处理更新父级的子级集合。这样,用于更新父子实体和将新子实体添加到父集合的端点通过单个端点发生。请求正文将包含一个子实体数组,并且端点本身将包含足够的信息来知道哪个父实体正在被更新:
即PUT .../parent/{uid}/child
端点会告诉我们 uid 为 {uid} 的父实体是被请求的实体,并更新它的子实体。
这种机制感觉有点——奇怪。也就是说,我必须以一种方式持久化新实体,并以另一种方式更新它们。我的更新/保存操作最好是批量执行,但是同时进行批量保存和更新感觉很奇怪。我必须同时做这两件事,因为您无法更新新实体
有没有更好的方法来做到这一点?这种关系是分层的,这意味着没有父资源,子资源就不存在。我仍然希望能够批量 POST/PUT。
我可以公开 POST 与 PUT 的区别(使用与上述相同的端点)。我有一个约束,使得子实体具有唯一的名称,因此 POST 必须失败以使用现有名称发布新的子实体,并且当请求正文包含名称的子实体时,PUT 必须失败不存在。这就是我选择使用单个端点的共享操作的原因。
【问题讨论】:
-
您能否发布您的父子实体代码?为什么不能简单地执行以下操作:@Transactional public void saveOrUpdate(long parentId, List
childs) { Parent parent = parentRepo.findById(parentId); updateParentChilds(parent, childs);} 其中 update parent childs 处理新的、孤儿、更新的孩子... -
我没有提供这个,因为它并不能真正帮助解决这个问题,不过感谢您的请求。我不需要帮助来弄清楚如何持久化这些,而是更高级别的关于 REST API 和围绕这种父/子关系的设计,其中存在组合类型关系
标签: java spring hibernate rest