每当我在基于Django/Piston的REST API应用程序中遇到验证失败时,我目前正在返回401 Unauthorized .看过HTTP状态代码注册表后 我不相信这是验证失败的合适代码,你们都推荐什么?
更新:上面的"验证失败"表示应用程序级别数据验证失败,即错误指定日期时间,虚假电子邮件地址等.
我正在尝试使用我正在处理的"类似REST"的API来确定在不同场景下返回的正确状态代码.假设我有一个终点允许以JSON格式进行POST'ing购买.它看起来像这样:
{
"account_number": 45645511,
"upc": "00490000486",
"price": 1.00,
"tax": 0.08
}
Run Code Online (Sandbox Code Playgroud)
如果客户向我发送"sales_tax"(而不是预期的"税收"),我应该返回什么.目前,我要回400.但是,我已经开始质疑自己了.我应该真的回来422吗?我的意思是,它是JSON(支持)并且它是有效的JSON,它只是不包含所有必需的字段.
当客户端调用我的REST-ful服务时,它需要知道响应是否来自"来自我",或者更确切地说是来自包含Web服务器的诊断是否发生了可怕的事情.
一种理论是,如果我的代码被调用,它应该总是返回一个HTTP OK(= 200),并且我必须返回的任何错误应该只在我返回的数据中表示.毕竟,这是我的代码获得响应,而不是裸浏览器.
有点不言而喻,如果我使用REST直接通过浏览器生成HTML读取,如果出现错误,我绝对必须返回错误代码.在我关心的情况下,它总是Javascript或Java来解释响应的内脏.
另一种可能性是存在一些HTTP状态代码系列,我可以高度放心地返回它/它们永远不会被周围容器中的问题生成.是这样的吗?
使用PUT方法更新资源时返回的最合适的响应代码是什么,请求包含一些会使域规则无效的数据?
例如,客户资源必须指定名称.如果代理尝试在不提供名称的情况下发出PUT,我不想更新资源,并且我想告诉调用者他们需要提供名称.
什么HTTP响应代码?
我正在为Web应用程序内部的第三方api(电子邮件套件)构建一个包装器,可以通过内部和自己的api访问.例如,这些方法将电子邮件地址和订阅列表作为参数并返回结果代码.
基本上我想:
例如成功:
所有这些情况基本上都是2xx类别,但必须触发不同的用户反馈消息,这就是我对使用HTTP状态代码感到不满意的原因.使用纯HTTP状态代码不能提供足够详细的反馈并定义a)附加状态代码或b)完全自定义状态代码感觉如此随机.
那么,去这里的最佳做法是什么?
这个答案表明我应该总是使用标准的HTTP状态代码,如果它们不适用,我的设计是错误的.如果不在客户端使用额外的逻辑和api调用,我如何区分差异?