web-services之Rest WebService 错误处理

rubylouvre 阅读:37 2025-06-02 22:19:02 评论:0

我将 RestWebservice 用于一些基本操作,例如创建/搜索。请求 xml 看起来像这样

<customer>  
    <name/> 
  ..... 
 </customer> 

对于成功的操作,我返回相同的客户 XML,其中填充了额外的字段(例如,我们在请求中空白的 systemId 等)。 与 Response.Status=2000

对于不成功的操作,我返回类似这样的不同错误代码。 例如 Response.Status = 422(不可处理的实体) Response.Status= 500(Internal Server Error) 和其他一些..

<errors> 
<error> An exception occurred while creating the customer</error> 
<error> blah argument is not valid.</error> 
</errors> 

现在我不确定这是否是将错误发送给客户端的正确方法。也许它应该出现在响应的标题中。

我将非常感谢任何帮助。 谢谢!

请您参考如下方法:

正确的 REST 错误处理方法是使用 HTTP 状态代码(听起来就像您正在做的那样)。其中有一个令人眼花缭乱的数组(as you can see here),您可能会惊讶地发现有多少可以适合最常见的情况。

就友好的错误消息而言,您有 2 个选择。首先,您可以在 HTTP 响应 ( see the Wikipedia article on HTTP for more info ) 中的状态码之后提供状态码的文本描述。该文本由服务器确定——而不是 HTTP 规范——并为您发送的特定消息提供了一些灵 active ;大多数服务器端框架为您提供了一种以编程方式设置此文本的方法。然而!最好不要滥用状态码描述,因为您不能保证用户的 Web 客户端会读取它(有利于只读取状态码并使用标准 HTTP 描述)。如果您的状态描述很简单并且您控制服务器和客户端(因此您知道自己得到了什么),我只会建议使用这种方法。根据我的经验,这种方法对于 5xx 范围的代码非常有效,但我不会在其他方面使用它。

您的第二个选项是您已经在做的事情:返回错误状态代码和错误描述作为消息正文。这是最佳实践;如果它对您有用,则无需更改。将其视为“错误的附加信息”而不是错误消息本身(它将是 HTTP 响应中状态代码之后的文本)可能会有所帮助。


标签:webService
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号