8

我们正在设计一个 RESTful API 来返回文档集合。我们的初始实现使用 HTTP 状态代码来指示请求是否无法完成。这似乎是一种被广泛接受的最佳实践(例如,参见此处)。

我们最近遇到了一个用户提取 1000 个文档的问题。其中一个文档检索失败,因此我们返回了 HTTP 500 状态代码。

另一种方法是返回一个 HTTP 200 状态代码,其中包含我们能够检索到的 999 个文档的有效负载,然后是一个错误集合,指示失败的那个。

这种替代方法是否违反了 RESTful 原则?这种情况应该如何处理?除了这两种方法之外,还有其他选择吗?

4

2 回答 2

2

是的,我认为只要您记录您返回的数据可以包含“错误”集合,这是完全可以接受的。这意味着无论您使用什么语义媒体类型来描述此文档集合,都应该具有描述文档集合应该是什么样子以及错误集合应该是什么样子的文档。然后,客户可以决定如何处理这些信息。

例如,如果您将其作为 JSON 返回(只是一个示例),您可能有一个类似的媒体类型application/json+documents,它可能看起来像这样:

{ data : {
    documents: [ ... ], //document objects
    errors: [ ... ] //error objects
}

然后,您将获得描述文档外观以及错误外观的文档。在真正的 RESTful API 中,记录的是媒体类型而不是调用,因为在真正的 RESTful API 中只有一个端点,其他所有内容都是通过该初始端点以及语义媒体类型“发现”的。因此,只要您记录了可能出现的错误,并描述了错误将被传递的格式,就应该没问题。

这也不是“异常”情况,因为在您的情况下,可以预见客户可能无法检索所有文档。因此,可以将这一事实告知客户。

于 2013-04-16T16:37:45.397 回答
1

在这样的特殊情况下,有时您必须跨越一条界限:让用户参与进来。

通知用户负载过大并返回内部服务器错误并非没有道理。

于 2013-04-16T16:37:33.050 回答