Rest WebService错误处理
我正在使用RestWebservice进行少量基本操作,例如创建/搜索。 请求xml看起来像这样
<customer>
<name/>
.....
</customer>
对于一个成功的操作,我返回相同的客户XML,并在其中填充额外的字段(例如systemId等,我们在请求中留空)。 与Response.Status = 2000
对于不成功的操作,我用不同的错误代码返回像这样的东西。 例如Response.Status = 422(不可处理的实体)Response.Status = 500(内部服务器错误)和其他几个..
<errors>
<error> An exception occurred while creating the customer</error>
<error> blah argument is not valid.</error>
</errors>
现在我不确定这是否是将错误发送给客户端的正确方式。 也许它应该出现在响应的标题中。
我会很感激任何帮助。 谢谢!
我会将XML包装在“请求”或“响应”包装中。
例如,
<customerrequest>
<customer>
..
</customer>
</customerrequest>
更重要的是:
<customerresponse>
<status>success | failure</status>
<customer> <!-- If success -->
...
</customer>
<errors> <!-- If failure -->
<!-- never underestimate the value of having a machine-friendly error code
for each possible error, or critical/non-critical errors -->
<error code="0001">An error occurred</error>
</errors>
</customerresponse>
这也意味着,随着您的服务的成熟,您可以在请求/响应标签中根据需要添加额外的非数据字段。 或参考号码。 或认证细节。
如果您使用的是SOAP,您可以使用SOAP内置的现有错误处理方式,尽管我个人发现它比较受限制(不是我调查得太深)。
正确的REST错误方法是使用HTTP状态代码(就像你在做的那样)。 有一些令人眼花缭乱的问题(你可以在这里看到),你可能会惊讶地发现有多少可能适合最常见的情况。
至于友好的错误消息,你有2个选择。 首先,您可以在HTTP响应中的状态代码之后提供状态代码的文本说明(有关更多信息,请参阅HTTP上的维基百科文章)。 这个文本是由服务器决定的 - 而不是HTTP规范 - 并且在你发送的特定消息中给你一些灵活性; 大多数服务器端框架为您提供了一种以编程方式设置此文本的方法。 然而! 最好不要滥用状态码描述,因为您不能保证用户的Web客户端会读取或不读取(仅支持读取状态码并使用标准的HTTP描述)。 如果你的状态描述很简单,并且你控制服务器和客户端(所以你知道你得到了什么),我只会推荐使用这种方法。 根据我的经验,这种方法在5xx代码范围内工作得很好,但我不会在其他方面使用它。
您的第二个选项就是您已经在做的事情:将错误状态代码和错误描述作为消息的主体返回。 这是最佳做法; 如果它为你工作,不需要改变。 将此视为“附加信息的错误”而非错误消息本身(这可能是HTTP响应中的状态码之后的文本)可能很有帮助。
链接地址: http://www.djcxy.com/p/45323.html上一篇: Rest WebService error handling
下一篇: RESTful Web Services: method names, input parameters, and return values?