我有一个弹簧靴休息 api。从概念上讲,我有 2 个名为 Venue 和 Address 的实体,其中一个 Venue 必须有一个地址。我的问题是我必须先发布一个地址实体,然后使用地址实体的自我链接发布我的地点实体。在我开始编写浏览器客户端之前,这似乎还不错。我不喜欢这样一个事实,即一旦地址被持久化到数据库中,在场地被持久化之前发生的事情中断了用户连接,我最终会在我的数据库中得到一个垃圾实体,因为它不会关联与任何东西。我可以通过删除刚刚创建的地址来编码我的客户在这些情况下回滚,但是如果我的 api 被第三方使用,那么我就有问题了。有什么方法可以在发布父实体的同时发布我的所有子资源数据?如果没有,是否有任何常见的策略来清除孤儿记录?
问问题
63 次
1 回答
0
这里有几个可供思考的选项。
如果相同的地址被 POST 两次,那么数据库中不应该有两条记录。确保这一点的方法是规范化地址输入,然后检查该地址是否已被添加。如果已添加,则返回 409 冲突或 200 OK。如果实际上创建了一个新地址,那么您可以返回 201 CREATED。您必须首先对数据进行规范化,以便同一地址的多个变体不会导致多个条目。例如,当归一化时转所有“Smith St.”。和“史密斯街”和“史密斯街”。进入“史密斯街”。您可以将此逻辑应用于地址中的所有字段。然后您可以检查该地址是否已经在数据库中。
如果这工作量太大,请考虑不要让 Address 成为数据库中自己的表/集合。也许只是让地址成为地点中的一个字段。如果在某些时候代码需要从 Venue 获取地址并将其放入自己的表中,那么当它出现时可以根据需要进行。
另一个想法是提供一个将 Venue 和 Address 作为输入的服务。也许你可以称之为 VenueRequest。该对象将包含两个主要字段,地点和地址。该服务将完成将地址存储到数据库的工作,然后是地点。
于 2017-04-17T17:17:24.243 回答