我有一个带有下一个资源的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
?
答案 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)
状态代码表示服务器 了解请求实体的内容类型(因此a415 (Unsupported Media Type)
状态代码不合适),以及 请求实体的语法是正确的(因此400 (Bad Request)
状态代码不合适但是无法处理包含的内容 说明。例如,如果是XML,则可能会出现此错误情况 请求正文包含格式正确(即语法正确),但是 语义错误的XML指令。
(找到here)
由于情况并非如此,我会选择404.查询有效但未找到任何对象。