Web services 您能将错误视为RESTful API中的资源吗?

Web services 您能将错误视为RESTful API中的资源吗?,web-services,rest,error-handling,Web Services,Rest,Error Handling,我的问题是关于RESTful API的错误处理。传统上,人们在响应体中使用错误代码和消息。我的问题是,你能否将这些错误转化为完整的资源。例如,您可能希望以HTML页面的形式获取错误,或者获取json格式的可能错误列表。将错误作为资源似乎是很自然的 然而,将一个“资源”作为另一个资源的错误返回似乎有点脏,但是如果您仔细想想,请求体中的错误代码和错误消息就是这样,没有资源的额外有用语义 同样要明确的是,这不应该是一个主观问题。我想知道这样做是否会违反RESTful设计原则或任何与HTTP通信相关的R

我的问题是关于RESTful API的错误处理。传统上,人们在响应体中使用错误代码和消息。我的问题是,你能否将这些错误转化为完整的资源。例如,您可能希望以HTML页面的形式获取错误,或者获取json格式的可能错误列表。将错误作为资源似乎是很自然的

然而,将一个“资源”作为另一个资源的错误返回似乎有点脏,但是如果您仔细想想,请求体中的错误代码和错误消息就是这样,没有资源的额外有用语义

同样要明确的是,这不应该是一个主观问题。我想知道这样做是否会违反RESTful设计原则或任何与HTTP通信相关的RFC

编辑:

一个问题是需要区分错误类型和错误实例。将错误类型作为资源是非常有用的,但是捕获每个可能的错误实例并将其报告回来并没有那么有用

Edit2:

问题的核心是,是否应该在4XX/5XX响应主体中放置错误资源(与请求的资源不同)。关于200+错误或4XX/5XX是否应该处理错误的问题在这里得到了回答:

虽然您可以将错误表示为一种资源,但您的主要问题是客户会发现很难将错误理解为一种错误;他们将成功返回代码解释为总体成功。那是错误的!(我们在工作中的一个web应用程序中遇到了这个问题,该应用程序通过发送一个200,其中一个字段表示有错误的文档来处理错误。这是一个非常棘手的问题。一旦我们改用真实的错误代码,客户端的工作效果会更好。)


为了缓解这种情况,返回JSON描述和错误(4**和5**消息的有效负载),这些错误描述了包含进一步信息的资源的位置;这些错误仍然是错误,但现在它们是包含丰富超链接信息的错误。那很安静,实际上很好!您可能还应该有一些方法让客户机通过其他机制发现他们应该知道的错误资源,例如,
/previous errors
资源,其中列出了他们有权看到的错误。毕竟,可发现性也是一个很好的休息原则;状态应该是资源的状态(尽可能多),并且应该尽可能少地存储在客户机中。

相关文章可能是客户机将按照API文档的要求执行。如果您告诉他们“200”表示“您与我们进行了沟通,现在查看响应以了解发生了什么”,他们最好这样做。@b您是否声称客户作者阅读(或相信)了文档?哈哈哈!哦,你是认真的?让我再笑一笑!(说真的,这只是为了给你自己的背部做一根杆子。当你尽可能地保持传统时,休息会更好。)我从来没有真正理解过这一切是如何在罗伊的宗教信仰之外运作的,但是这里的评论线程没有足够的带宽到达任何地方。难道没有典型的1000个其他细节需要客户作者阅读文档吗?伙计们,让我们冷静一下。:)与4XX/5XX相比,整个200+错误已在此处解决:。我的问题与答案的后半部分更为一致。@trcarden您不必永远保留它们(10分钟可能足够了),但在[45]**响应中获取对象是合法的HTTP和合理的休息(因为这是基于HTTP概念的)。你也不必为每一个错误都这么做;对于那些完全符合一般想法的人(例如,真正的404),没有必要为更多信息提供自定义资源(“未找到”是“未找到”)。