Ruby on rails 哪个http状态码返回404或422?

Ruby on rails 哪个http状态码返回404或422?,ruby-on-rails,http,rest,Ruby On Rails,Http,Rest,我有一个Rails API应用程序,其中包含下一个资源:/images。所有图像都有一个所有者 要创建新图像,我将执行下一个请求/images: image_info = { owner_id: '1234', name: 'img1' } post :create, :format => "json", :image => @image_info 在图像控制器中,我执行以下操作: owner = User.find( params[:owner_id] ) 如果owner\u

我有一个Rails API应用程序,其中包含下一个资源:
/images
。所有图像都有一个
所有者

要创建新图像,我将执行下一个请求/images:

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

post :create, :format => "json", :image => @image_info
在图像控制器中,我执行以下操作:

owner = User.find( params[:owner_id] )
如果
owner\u id
不存在或无效,那么后端应该返回什么错误代码,404或422以及
owner\u id:invalid

更新 我再次阅读,我将把答案改为
422
,因为您无法完成对请求的处理。不可剥夺的实体这是一个更好的匹配,您没有请求对象,所以“未找到”没有太多意义。最后是你的选择,只要选择你觉得更好的

422不可处理实体(WebDAV;RFC 4918) 请求格式正确,但由于语义错误而无法遵循

资料来源:

422(不可处理实体)
状态代码表示服务器 了解请求实体的内容类型(因此
415(不支持的媒体类型)
状态代码不合适),并且 请求实体的语法正确(因此
400(错误请求)
状态代码不合适),但无法处理包含的 说明书例如,如果XML 请求主体包含格式良好的(即语法正确的),但 语义错误的XML指令

(发现)


既然不是这样,我就选404。查询是有效的,但没有找到对象。

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

根据mozilla的开发指南:

超文本传输协议(HTTP)422不可处理实体 响应状态代码表示服务器理解内容 请求实体的类型,请求实体的语法为 正确,但无法处理包含的指令

我会说使用代码422,因为请求路径是正确的,提供的数据也是正确的,但是没有这样的实体。此外,它在描述中说——未经修改不得重复请求——这适用于本案。
我认为404在请求路径错误时最合适。对于发送请求的人来说,将其用于其他任何事情都是令人困惑的,因为它没有提供足够的信息。如果您在本例中返回404,我会感到困惑,并认为我将请求发送到了错误的uri。希望这能有所帮助

正如你所说,最终是我的选择,但我想知道人们的想法。谢谢你的意见。我一直都这么做!返回
404
可能会使线路混乱。如果我看到
404
,我怀疑请求路径,并且请求路径是正确的
400
也不适用,因为请求在语法上是正确的。所以,
422
确实是最好的选择。