没有必填字段的请求的正确HTTP响应代码是什么

时间:2011-02-22 12:02:58

标签: api http rest http-status-codes

考虑用户正在删除帖子的简单情况。这是一个简单的HTTP DELETE / POST请求,带有一个必填字段post_id。

如果没有提供post_id,服务器应该怎么做?

显然,用户永远不应该遇到这种行为,所以让我们是纯粹的。

我的第一次接受将是400次不良请求,但规范说

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

我会说语法/ http POV缺少字段是可以的,它是应用程序域特定的语义要求。

200 OK说明不好,500感觉很奇怪,因为这是请求问题。

几点思考?

2 个答案:

答案 0 :(得分:30)

400是正确的答案。

从HTTP的角度来看,

400不限于格式错误的语法。缺少必需参数是应用程序定义的语法中的错误,因此是“错误请求”

修改

起初,似乎很奇怪,没有单独的返回代码,但返回代码旨在区分客户端应采取的操作。 400错误代码意味着客户端应将POST数据或查询字符串更改为应用程序定义的格式。因此适合这种情况。

答案 1 :(得分:1)

在REST方案中,应该通过URL标识要删除的资源,因此资源的ID应该是该URL的一部分,以便正确识别它。一旦这个假设是正确的,那么URL要么标识不同的资源fr删除,要么不是(这将给出404)

但是,在缺少参数的一般情况下,我经常使用403 Forbidden错误。理由是请求被理解,但我不会按照要求去做(因为事情是错误的)。响应实体解释了什么是错误的,因此如果响应是HTML页面,则错误消息在页面中。如果它是JSON或XML响应,那么错误信息就在那里。

来自rfc2616

  

10.4.4 403禁止

     

服务器理解请求,但拒绝履行请求   授权无效,请求不应重复   如果请求方法不是HEAD并且服务器希望制作
  公开为什么请求没有得到满足,它应该描述   实体拒绝的原因。如果服务器不希望   将此信息提供给客户,状态代码404
  (未找到)可以代替使用。