Http“ Put”方法来更新记录并同时插入新记录

问题描述 投票:0回答:1

我有一个用例,需要更新数据库中的现有记录,将其标记为过期,并使用新的到期日期创建新记录。

为了更新记录,我打算使用“ PUT”调用。但是,要创建新记录,是否需要从UI再次调用“ POST”端点?

或者我可以简单地在“ PUT”方法实现中添加另一个repository.save(obj)方法吗?

谢谢..

rest spring-rest
1个回答
0
投票

PUT和POST之间的主要区别-一个是幂等的,另一个不是幂等的。这意味着您可以重复多次相同的PUT,而不会添加越来越多的实体/元素。

通常,创建新资源是POST操作,因为在大多数情况下,您发送的实体不带ID,而服务器分配一个ID。因此,如果多次重复同一操作-您将获得更多实体。这不是幂等的,需要POST。

因此,在理想情况下,您将发送2个单独的请求:PUT-用于到期,POST-用于新实体。在现实世界中,您可能会遇到其他限制:

  • 两个操作都可能需要在单个事务中运行。否则,您可以删除旧实体而不创建新实体。
  • 单独的请求可能会导致客户端的性能问题或复杂性(尤其是在像JS这样的异步环境中的情况。

因此,您可能必须创建一个丑陋的API,以便在1个请求中同时接受两个实体。但是这样的请求应该是POST,因为它不是幂等的。

尽管听起来您所处的新实体只是对旧实体的更新。这通常可以通过使用新字段放入相同实体来解决。在这种情况下,您必须认识到旧实体需要标记为过期。而且,您不会为更新后的实体分配新的ID-您会分配新的版本(数据库中的附加列)。

© www.soinside.com 2019 - 2024. All rights reserved.