0

我已经开发了一组 RESTful Web 服务,我正在尝试以一种有用的方式为用户处理错误。

我遇到了错误编码帐户资源的 URL 并收到 404 错误的情况。我预计会出现错误,因为服务器中没有 @Path 注释会响应。但是由于我得到了404,我向用户报告说找不到他们的帐号。

我猜从纯 RESTful 的角度来看,404 “有意义”,因为 /server/foo/123450 没有“资源”(当资源的正确路径是 /server/bar/123450 时)。但是 /server/thisPathHasNoHopeOfExisting/123450 也响应 404。

/server/bar/000000 其中帐号 00000 不存在响应 404。

我怎样才能告诉我的用户正确的事情?(那 /server/thisPathHasNoHopeOfExisting/xxxxxx 是一个真正的服务器错误,一个 500 系列,因为服务器永远不会回答这个问题)——有没有办法让我的 Jersey 服务少一点 REST-pedantic?

4

1 回答 1

0

How can I tell my user the right thing?

404正确的。

(that /server/thisPathHasNoHopeOfExisting/xxxxxx is a true server error

你是什​​么意思?为什么是服务器错误?客户是要求它的人,不是吗?如果您正在创建一个“真正的”REST 接口,那么您将使用超媒体作为应用程序状态的引擎——客户端永远不会想到 /server/thisPathHasNoHopeOfExisting/,因为您没有告诉他们这件事。

在 Jersey/JAX-RS 中,您可以使用 UriBuilder 来构建 URI - 而且您应该这样做。然后就没有“错误编码 URI”了。

您也许可以使用 JAX-RS 的优先规则来创建某种包罗万象的页面,但我不确定这是否会非常有效。我的意思是,您如何区分您打算存在但可能不存在的资源(例如不存在的帐户)和您不打算存在的资源?您的问题源于遗漏错误,因此您可以设计的任何解决方案也将继承此类可能的错误。使用 UriBuilder。

于 2013-03-11T19:44:53.027 回答