休息服务返回404

时间:2015-06-18 11:31:32

标签: rest http java-ee

如果对休息服务的调用执行数据库查询,没有找到结果并返回,返回代码的最佳做法是什么。

这应该是404还是200,并显示没有记录的消息?

网址已正确解析,并且没有发生任何服务器错误,只是没有返回任何记录。

修改 示例网址是:

http://localhost/app/pr_xyz/1234

用于检索属于现有用户1234的xyz列表。用户ID 1234已被检索并且已知存在于数据库中。此URL(pr_xyz)仅用于检索属于该用户的xyz列表。

关系是1个用户到0或多个xyz。

在这种情况下,现有用户没有xyz。这应该是带有意义的消息的404或200。

此外,我无法控制网址。

1 个答案:

答案 0 :(得分:1)

同意@Satya,它应该是200,但我们可以通过向后工作来达到答案。

所以,我们从full list of HTTP status codes.开始。从底部开始。

  • 是服务器错误吗?没有?然后它不是5xx
  • 是客户端错误吗?也许?也许这不是4xx
  • 这显然不是重定向,所以它不是3xx。
  • 这是一次成功的通话吗?或许。
  • 您是否正在回复临时回复?不,它也不是1xx。

通过消除过程,正在查看2xx代码。确切哪些是合适的取决于您的应用程序的语义。

因为这不是DELETE调用,所以我可能不会使用204 No Content,这可能是唯一的好选择。并不是没有内容。

有内容:“找到0个结果”。如果没有搜索结果,Google不会向您显示空白页。

所以我们到达200,并返回一个有意义的身体。如果您要返回原始结果,那么您可能需要考虑将它们包装在搜索结果对象中以提供一些元数据。

啊!那么等一下,如果不是搜索结果,你指的是RESTful资源的集合呢?

GET /items

在这种情况下,我仍然会返回一个200,其身体表示没有物品。

如果您尝试检索特定的资源,该怎么办?

GET /items/1234

在这种情况下,是的,你想暗示项目1234不存在,你应该返回404。