2

假设我有FooEnity一个 id 为 35 的 Web 服务公开,它位于 at /myhost/api/fooentity/35

现在我想实现一个 PATCH 调用以允许部分更新FooEntity(假设 25 个可用字段中的 2 个被向上传递以进行更新)。

我的问题是,PATCH 内容(json/xml)是否应该包含id35 个?实体的地址由 URI 指定,并且id不是可更新的字段,如果包含它,则需要额外验证以确保两个 id 匹配。所有这些都表明没有。不过,没有它在里面感觉很奇怪。

这样做的适当方法是什么?

(注意,问题与语言无关,但在 ASP.NET 4.0 Web API 框架中实现,如果这会影响任何人的答案)。

4

1 回答 1

2

这是一个很好的问题!

有两种方法可以处理。如果正文中的 id 与 URI 中的 id 不同,您可以引发验证错误。或者您可以忽略请求正文中的任何 id。如果您通过手动复制属性进行修补,则不会复制 id 属性以忽略它。如果您使用帮助类来修补实体,则可以应用修补程序,然后将实体的 id 设置为 URI 上的任何内容,以确保它在修补后保持相同的 id。

无论您选择哪个选项,都取决于您。如果请求主体 id 与实体 id 不匹配,则发回 400 可能对客户来说更清楚一些,因此他们了解 id 不会更改,但这也需要您编写更多代码来实现。

于 2013-02-15T16:02:41.157 回答