Http "Put" 方法更新记录并同时插入新记录

Http "Put" method to update a record and insert new one simultaneously

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

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

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

谢谢..

编辑 1:新记录是过期记录的副本,但具有新的到期日期。

PUT 和 POST 之间的主要区别 - 一个是幂等的,另一个不是。这意味着您可以多次重复相同的 PUT 并且不会添加越来越多 entities/elements.

通常创建新资源是一个 POST 操作,因为在大多数情况下您发送一个实体 w/o ID 并且服务器分配一个。所以如果你多次重复相同的操作 - 你会得到更多的实体。这不是幂等的,需要 POST.

因此,在完美世界中,您将发送 2 个单独的请求:PUT - 过期,POST - 新实体。在现实世界中,您可能会遇到额外的限制:

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

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

尽管听起来您所处的新实体只是对旧实体的更新。这通常通过 PUTing 具有新字段的相同实体来解决,而不发送显式删除。在这种情况下,服务器必须认识到旧实体需要标记为过期。而且您不会为更新的实体分配新 ID - 您会分配一个新版本(数据库中的额外列)。