哪个http状态代码返回404或422?

时间:2013-03-13 21:03:07

标签: ruby-on-rails http rest

我有一个带有下一个资源的Rails API应用程序:/images。所有图片都有一个owner

要创建新图像,我接下来请求/ images:

image_info = { owner_id: '1234', name: 'img1' }

post :create, :format => "json", :image => @image_info

在我的图像控制器中:

owner = User.find( params[:owner_id] )

如果owner_id不存在或无效,后端应返回什么错误代码,404或422返回owner_id: invalid

3 个答案:

答案 0 :(得分:6)

<强>更新 我再次阅读,我会将答案更改为422,因为您无法完成处理请求。不可处理的实体是一个更好的匹配,你没有请求一个对象,所以“找不到”没有多大意义。最后是你的选择,只需选择对你感觉更好的东西。

422 Unprocessable Entity(WebDAV; RFC 4918) 请求格式正确,但由于语义错误而无法遵循

来源:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error

答案 1 :(得分:1)

首先,我认为这个问题不应该针对Ruby,因为它适用于大多数Web应用程序。

根据mozilla的开发指南https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422

  

超文本传输​​协议(HTTP)422无法处理的实体   响应状态码表示服务器可以理解内容   请求实体的类型,并且请求实体的语法为   正确,但是无法处理其中包含的说明。

我想说代码422,因为请求路径正确,提供的数据也正确,但是没有这样的实体。此外,它在描述中表示-未经修改就不应重复该请求-在这种情况下适用。 我想说404在请求路径错误时最合适。将其用于其他任何事情都会使发送请求的人感到困惑,因为它没有提供足够的信息。如果您返回404,我会感到困惑,并认为我已将请求发送到错误的uri。希望有帮助

答案 2 :(得分:0)

  

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

(找到here

由于情况并非如此,我会选择404.查询有效但未找到任何对象。