考虑用户正在删除帖子的简单情况。这是一个简单的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感觉很奇怪,因为这是请求问题。
几点思考?
答案 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
(未找到)可以代替使用。