【问题标题】:REST entity id in PATCH request bodyPATCH 请求正文中的 REST 实体 ID
【发布时间】:2013-02-15 15:28:47
【问题描述】:

假设我有一个FooEnity,其 ID 为 35,由 Web 服务公开,它位于 /myhost/api/fooentity/35

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

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

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

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

【问题讨论】:

    标签: asp.net xml json rest asp.net-web-api


    【解决方案1】:

    这是个好问题!

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

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

    【讨论】:

    • 感谢您的回复。鉴于我列出的所有内容以及您自己的选项列表,您会采用哪种方式?
    • 就个人而言,我会忽略请求正文中的 ID。我并不是说这是最好的解决方案,但我喜欢在合理的范围内使我的逻辑尽可能简单。
    • 感谢您的反馈。我最终在 PATCH 方法的模型中将 id 字段设置为可为空的 int(因此是可选的),如果 model.id 为空,则从 URI 中交换 id。如果指定且与 URI 中的不同,我返回了一个错误请求。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2016-04-26
    • 2023-04-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多