请求处理失败的HTTP响应

3
假设我有一个REST POST端点:www.foo.com/id/X,其中X代表数字。
我的服务端伪代码如下:
performIdLookup(int id) { 

  if ( idExists(id) ) {
     return toJson(lookup(id)) // returns 200/OK Status Code with object as JSON
  }
  else {
     return HTTP_???_error 
  }
}

根据这个问题,发送400错误似乎不正确,因为用户提交了有效请求,但服务器找不到它。
这里应该使用什么HTTP响应以及为什么?

那就是正确的错误404。 - Scott Selby
你现在应该已经记住了404 - 在进行Web开发时 ;p - Scott Selby
404是正常的。顺便说一下,500是内部服务器错误。 - Hank Lapidez
@ScottSelby 500 不应该是非认证的。500 内部服务器错误:"遇到意外情况且没有更具体的信息可用时,给出一个通用的错误消息。" - user1907906
@ScottSelby 由于响应是JSON,这看起来像是一个REST API。对于这种情况,重定向不是一个好主意。 - user1907906
@Tichodroma - 是的,我也错过了那个。 - Scott Selby
2个回答

5
那非常简单。
404 Not Found

如果在 /id/42 找不到资源,那么这个URL就无法找到资源。请参考 HTTP状态码列表

404 服务器未找到与请求URI匹配的任何内容 我不明白你对这段文字的回答。是因为在Xid下没有资源存在吗? - Kevin Meredith
1
@KevinMeredith - 你写道“服务器找不到它。”这正是404的用途。 - Scott Selby
服务器未找到与请求资源标识符匹配的任何内容。 - Paddy

1
不是400(错误请求),而是404(未找到)。是的,404并不是我们在这些情况下习惯看到的,但你可以在响应中添加一些自定义信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接