9

我有一个带有下一个资源的 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

4

3 回答 3

10

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

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

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

于 2013-03-13T21:05:34.737 回答
2

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

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

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

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

于 2018-12-06T13:04:34.957 回答
0

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

(在这里找到)

由于不是这种情况,我会选择 404。查询有效但未找到对象。

于 2013-03-13T21:06:37.960 回答