Json 如何从PUT请求更新嵌套数据

Json 如何从PUT请求更新嵌套数据,json,rest,Json,Rest,假设我们有一张在RDBMS中以草稿状态保存的发票。发票有三个行项目。rest客户端获取发票,并修改行项目 获取/发票/123 { "InvoiceId" : "123", "lineitems": [ { "id":"A", "qty":"5"}, { "id":"B", "qty":"5"}, ] } 假设用户修改发票如下:; 更改项目A的数量 删除项目B。 添加新项目C 结果是: { "InvoiceId" : "12

假设我们有一张在RDBMS中以草稿状态保存的发票。发票有三个行项目。rest客户端获取发票,并修改行项目

获取/发票/123

{
    "InvoiceId" : "123",
    "lineitems":
    [
        { "id":"A", "qty":"5"},
        { "id":"B", "qty":"5"},
    ]
}
假设用户修改发票如下:; 更改项目A的数量 删除项目B。 添加新项目C

结果是:

{
    "InvoiceId" : "123",
    "lineitems":
    [
        { "id":"A", "qty":"10"},
        { "id":"D", "qty":"5"},     
    ]
}
净变化是删除了一行,更新了一行,添加了一行

然后,用户保存发票草稿,这将导致PUT请求

出售/发票/123

{
    "InvoiceId" : "123",
    "lineitems":
    [
        { "id":"A", "qty":"5"},
        { "id":"B", "qty":"5"},
    ]
}
更新服务器上的行项目的最佳策略是什么

请记住,删除所有行项目并从头开始创建它们将丢失这些行上的所有元数据(创建人、创建日期、上次修改人…)

谢谢

PUT方法请求将封闭的实体存储在提供的请求URI下

PUT
视为替换。如果资源被接受,
PUT
请求中的资源状态应该是资源的结果状态


如果要添加/删除/更新特定元素,则应使用
PATCH

使用子资源进行建模,这是另一种方法,允许直接更新已更改的位。