用于更新具有空值或空值的信息的REST API

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

我对如何最好地构建可以修改数据库中记录的API有一个一般性问题。

假设我们有一个包含10列的表,我们可以使用REST(GET)查询这10列。 JSON响应将包含所有10个字段。这很容易,并且没有问题。

[下一步是有人想通过POST创建新记录。在这种情况下,此人仅发送JSON请求中10个字段中的8个。然后,我们只填充数据库中的8个字段(其余字段为NULL)。这也没有问题。

但是如果有人要更新记录会怎样?我们在这里看到了各种优点和缺点的可能性。

  1. 仅发送应更新的内容。问题:如何显式清空/删除字段?如果在JSON中传递了“ NULL”,则对象中将获得NULL,但其他未传递的字段也将为NULL。因此,我们无法区分可以删除哪个字段和不能触摸哪个字段。

  2. 已发送完整对象。问题:在这里,对象可以先通过GET获取,然后进行相应更改并通过PUT返回。现在,我们可以获取所有信息,并且可以将信息直接写回到数据库中。因为空字段之前已经为空或已由用户清除。

如果通过更新API扩展对象,会发生什么情况。假设我们再扩展五个字段来扩展数据库。 API的用户进行GET操作,获取15个字段,但是只能读取自己在页面上知道的10个字段(因为他尚未更新自己的信息)。然后,他更改了10个字段中的某些字段,并通过PUT将其发送回去。然后,我们将仅更新我们站点上的10个字段,并且将从数据库中清空5个新字段。

或者您是否必须为每个字段创建一个单独的端点?我们还考虑过使用键/值创建地图,具体应更改什么。

关于技术:我们使用Wildfly 15 with Resteasy and Jackson

java rest jackson resteasy
1个回答
1
投票

一种通用技术是跟踪实体POJO上的更改。

  1. 使用color =黑色,size = null和age = null加载狗>
  2. size设置为空(设置器会将这个字段标记为已更改)
  3. 运行更新SQL
  4. POJO将具有一个内部状态,知道size已更改,因此将该字段包括在UPDATE中。另一方面,age从未设置,因此保持不变。 jOOQ就是这样,我敢肯定还有其他人。

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