2012-03-21 24 views
0

假设我们有一个在RDBMS中以草稿状态保存的发票。发票有三个订单项。休息客户获取发票并修改订单项。如何更新来自PUT请求的嵌套数据

GET /发票/ 123

{ 
    "InvoiceId" : "123", 
    "lineitems": 
    [ 
     { "id":"A", "qty":"5"}, 
     { "id":"B", "qty":"5"}, 
    ] 
} 

假设用户修改发票如下;项目的 变化量一 移除项B. 添加新项C.

结果是:

{ 
    "InvoiceId" : "123", 
    "lineitems": 
    [ 
     { "id":"A", "qty":"10"}, 
     { "id":"D", "qty":"5"},  
    ] 
} 

的净变化是,行已被删除,行已经更新,并一条线已被添加。

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

PUT /发票/ 123

什么是更新服务器上的行项目的最佳策略是什么?

请记住,所有的delete一个行项目,并从头开始创建他们将失去对这些线路的任何元数据(创建者,创建日期,最后由...修改)

感谢,

回答

0

PUT方法要求封闭实体存储在提供的Request-URI下。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

PUT如更换思考。 PUT请求中的资源状态应该是资源的最终状态(如果它被接受)。

如果你想添加/删除/更新特定的元素,你应该看看使用PATCH

+0

使用子资源建模是另一种方式,它允许已更改的位直接更新。 – 2012-03-21 22:20:14