【问题标题】:what http response code for rest service on put method when domain rules invalid当域规则无效时,put方法上的rest服务的http响应代码是什么
【发布时间】:2010-02-03 09:36:20
【问题描述】:

当使用 PUT 方法更新资源并且请求包含一些会使域规则无效的数据时,返回的最合适的响应代码是什么?

例如,客户资源必须指定一个名称。如果代理尝试在不提供 name 的情况下发出 PUT,我不想更新资源,我想告诉调用者他们需要提供 name .

什么 HTTP 响应代码?

【问题讨论】:

    标签: rest


    【解决方案1】:

    422 怎么样?

    “422(Unprocessable Entity)状态码表示服务器理解请求实体的内容类型(因此415(Unsupported Media Type)状态码是不合适的),并且请求实体的语法是正确的(因此400 (Bad Request) 状态码不合适)但无法处理包含的指令。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会发生此错误情况。 "

    RFC 4918, Section 11.2

    【讨论】:

    • 听起来很有希望。我没有看到那个代码,它没有出现在大多数文档中。
    • 这是 WebDav 的一部分,/not/ 标准 HTTP。
    • 马修,这个评论没有意义。 HTTP 中的状态代码可扩展是有原因的,为什么会有 IANA 注册中心。
    • 注册表存在,因此不同的扩展不会为不同的目的声明相同的数字。这并不意味着您应该只从扩展程序中挑选状态代码。
    • 嗯,这也不意味着你不能。我之前与 RFC 2616 的作者进行过讨论,他同意 422 是一件好事,绝对可以在 WebDAV 之外使用。如果您不同意,我建议您加入 HTTPbis 工作组,除其他外,该工作组的职责是在必要时澄清现有的扩展点。
    【解决方案2】:

    本例中响应码与http方法无关。您应该返回与 POST 请求相同的状态代码。我会说你应该使用400409注意:请参阅 cmets 中关于两者区别的进一步讨论)。

    【讨论】:

    • 我实际上写了 409 - 冲突。不过,查看w3.org/Protocols/rfc2616/rfc2616-sec10.html 下的 400 - 错误请求“由于语法错误,服务器无法理解请求。”。如果你可以检查一个请求的业务规则,并且知道它们是无效的,那么它肯定不是格式错误的语法吗?我投了 409 票。
    • 虽然409 可能是最正确的,但X00 响应也可以被视为一个类别中的通用响应。所以400 不如409 具体。这不是它们的定义方式,而是事实上的解释。
    • 500 在这种情况下绝对不是正确的响应,因为出错的是客户端,而不是服务器。 409 用于并发冲突,而不是违反规则。
    • @darrel 你确定409 吗?该规范以并发冲突为例,但我认为它只是更广泛类别的一个示例。
    • IE8 显示 408/409 为“网站太忙,无法显示网页”。
    【解决方案3】:

    我会返回400。严格来说,这是针对“格式错误的语法”(不是无效数据),但实际上YouTubeTwitter 等将其用于更普遍的“错误”请求。

    【讨论】:

    • 我相信这个响应现在也被接受为无效数据的正确响应。
    猜你喜欢
    • 2013-06-20
    • 2015-02-26
    • 2016-06-22
    • 2012-11-25
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2018-09-14
    相关资源
    最近更新 更多