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