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



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

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

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

谢谢。。

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

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

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

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

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

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

尽管听起来您情况中的新实体只是对旧实体的更新。这通常可以通过用新字段对同一实体进行 PUT 来解决,而无需发送显式删除。在这种情况下,服务器必须识别旧实体需要标记为过期。而且您不会为更新的实体分配新 ID - 您将分配一个新版本(数据库中的额外列(。

使用数据库跳跳虎可以完成创建新条目

最新更新