假设我的网站服务公开了一个ID为35的FooEnity
,它位于/myhost/api/fooentity/35
。
现在我想实现一个PATCH调用,以允许对FooEntity
进行部分更新(因此,假设25个可用字段中有2个被传递以进行更新)。
我的问题是,如果PATCH内容(json / xml)包含35的id
吗?实体的地址由URI指定,id
不是可更新字段,如果包含它,则需要进行额外验证以确保两个ID匹配。所有这些都表明否。尽管如此,没有它在那里感觉很奇怪。
这样做的恰当方法是什么?
(注意,问题与语言无关,但是在ASP.NET 4.0 Web API框架中实现,如果这会影响任何人的答案)。
答案 0 :(得分:2)
这是一个很好的问题!
有两种方法可以解决这个问题。如果正文中的id与URI中的id不同,则可以引发验证错误。或者你可以忽略请求体中的任何id。如果您通过手动复制属性进行修补,则不会复制id属性以忽略它。如果您正在使用帮助程序类来修补实体,则可以应用修补程序,然后将实体的ID设置为URI中的任何内容,以确保它在修补程序之后保持相同的ID。
您选择的任何选项都取决于您。如果请求正文ID与实体id不匹配,则返回400对于客户端可能会更清楚,因此他们知道id不会被更改,但它还需要您编写更多代码来实现。