2010-06-25 208 views
8

我们正在讨论如何处理REST异常。如何处理REST异常?

响应内容类型:JSON

两种解决方案,我们有:

  1. 扔掉所有的unchecked异常的JSON响应。
  2. 发送请求无效的响应码。

参数:

  • 当它是一个错误,为什么返回JSON?只需发送无效的回复代码。

相反的观点:

  • 响应代码过于技术处理正常开发。

你说什么?

+0

我想知道为什么响应代码太技术。如果您必须/可以采取任何纠正措施,您应该依赖响应代码(或json中的任何其他错误代码),而不是用户可读的错误字符串。 – 2010-06-25 22:11:14

+0

我们处理各种客户端。所以我们不想假定客户的开发人员能够熟练地理解响应代码。那也不是人们的想法,也是我的想法。如果他们看着json,他们可以理解错误。 – 2010-06-27 14:55:57

+0

REST的主要优点之一是接口的一致性。所以当你说我们有一个REST API时,客户端会自动预测资源列表和GET PUT POST DELETE操作,同样他也知道他可以想象的错误代码。错误字符串肯定会对您的客户端(开发人员)进行调试非常有用。但是他们针对你的API编写的代码应该根据代码而不是字符串采取行动。 – 2010-06-27 15:12:59

回答

13

对于我最近开发的JSON API,我都是这样做的。我总是回应有效的JSON(好吧,假设我有回应)。如果我检测到无效请求,则使用状态400.如果检测到服务器错误(我不相信是由无效请求导致的),则使用5xx状态。 JSON对象包含一个特殊的关键字,它只针对错误而设置,并带有一个字符串值。

我认为这是一个很好的解决方案,尊重REST原则,并且可以以多种方式使用。其他一些JSON API使用相同的解决方案,例如Yahoo Search。试试http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&output=json

+1

+1:对于RESTful使用HTTP,您绝对必须使用HTTP响应代码。其他信息可以在表示中返回。 – 2010-06-25 22:14:03

+0

我刚刚在SO的“相关”项目中看到了这个答案。虽然它是一个旧的答案,但它显然仍然显示出来。我相信对于良好的错误处理来说,有很多很多,而不仅仅是使用HTTP状态代码(尽管这是一个很好的开始!)。请参阅http://soabits.blogspot.dk/2013/05/error-handling-considerations-and-best.html进行深入讨论。 – 2014-06-13 08:19:40

5

使用类似于HTTP的错误代码。所以50 *由于某些内部问题导致任何异常。而40 *为不合理的论点。尽可能避免使用自己定义的代码。这个想法是有一个“统一”的界面。

一般来说。 204成功不发送任何内容 200用于成功使用json表示的资源 并且如果它没有成功的操作返回适当的响应代码。你可以选择返回一个json。为了简化事情,您可以为所有错误响应使用通用格式(json)。

http://en.wikipedia.org/wiki/REST是一个必须先阅读,然后再冻结你的api规范。

+0

“201无需发送任何内容即可成功”。 201是创建的,因此只能在“创建新资源”时使用,而不是一般的成功。你可能会想到204,“无内容” – 2010-06-25 22:22:47

+0

哎呀!对。感谢您的更正! – 2010-06-25 22:31:30