我有一个用例,我需要更新数据库中的现有记录,将其标记为过期,并创建具有新到期日期的新记录。
对于更新记录,我打算使用“ PUT”调用。 但是,要创建新记录,我是否需要从UI再次调用“ POST”端点?
或者我可以在“ PUT”方法实现中简单地添加另一个repository.save(obj)
方法吗?
谢谢..
编辑1:新记录是过期记录的副本,但是具有新的到期日期。
答案 0 :(得分:0)
PUT和POST之间的主要区别-一个是幂等的,另一个不是幂等的。这意味着您可以重复多次相同的PUT,而不会添加越来越多的实体/元素。
通常,创建新资源是POST操作,因为在大多数情况下,您发送不带ID的实体,而服务器分配一个ID。因此,如果多次重复同一操作-您将获得更多实体。这不是幂等的,需要POST。
因此,在理想情况下,您将发送2个单独的请求:PUT-用于到期,POST-用于新实体。在现实世界中,您可能会遇到其他限制:
因此,您可能必须创建一个丑陋的API,以在1个请求中同时接受两个实体。但是这样的请求应该是POST,因为它不是幂等的。
尽管听起来您所处的新实体只是对旧实体的更新。通常可以通过在不发送显式删除的情况下使用新字段对同一实体进行放置来解决此问题。在这种情况下,服务器将不得不认识到旧实体需要标记为过期。而且,您不会为更新后的实体分配新的ID,而是会分配新的版本(数据库中的附加列)。