如果找不到隐含资源,则使用哪种状态代码/错误消息

时间:2019-02-16 10:47:03

标签: rest

假设我有一个端点/process,该端点接受带有object_id的POST请求。但是,我的API需要访问ID为object_id的对象的多个子对象以计算其响应。

假设找到了对象但没有找到子对象,我应该返回哪个状态代码和错误消息?

由于我想通知最终用户出了什么问题而不是返回空白响应,所以我可以看到几个选项:

  • 400 Bad Request。但是,这可能错误地暗示该请求有问题,而没有错。
  • 404 Not Found。但是,这可能错误地暗示object_id所引用的对象不存在,确实如此。

2 个答案:

答案 0 :(得分:1)

首先,您需要确定问题是客户端还是服务器端。 4XX错误是针对错误的请求。暗示用户发送的请求有问题。 如果找不到该对象是由于服务器端问题引起的,那么我认为最好抛出一个服务器端错误(即5XX)。

更新:

在OP的评论之后,我的建议是:412 (Precondition Failed)。另外,我认为“未找到”和“无内容”状态不适合您的情况。

答案 1 :(得分:0)

我认为这种情况下没有标准的HTTP状态代码。 4xx代码表示客户端错误,而5xx服务器错误。可以说,在这种情况下,请求没有错,因此您可以返回自定义的5xx状态代码。

但是一些标准状态代码却很接近:

  • 409 Conflict
  • 422 Unprocessable Entity
  • 甚至是404 Not Found