休息WebService的错误处理(Rest WebService error handling)

2019-07-03 13:53发布

我使用RestWebservice的一些基本操作,如创建/搜索。 请求XML看起来是这样的

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

对于成功的操作我回到同一客户XML与人口中有多余的领域(如的systenId等我们在请求空白)。 与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>

现在,我不知道,这是否发送错误到客户端的正确途径。 也许这应当存在于所述响应的报头中。

我会很感激的任何帮助。 谢谢!

Answer 1:

我会在包裹“请求”或“响应”包装的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已经内置了,虽然我个人认为它相当有限(不,我调查过深)。



Answer 2:

对错误的正确REST方法是使用HTTP状态代码(因为它听起来像你正在做的)。 这里是其中的一个令人眼花缭乱的( 你可以在这里看到的 ),你可能会惊讶地看到有多少可以适应最常见的情况。

至于友好的错误消息,您有2种选择。 首先,你可以提供HTTP响应状态代码后的状态代码的文本描述( 见HTTP维基百科的文章以获得更多信息 )。 本文由服务器决定 - 而不是HTTP规范 - 并为您提供您发送特定消息在一定的灵活性; 大多数服务器端框架给你一个方法来编程设置这个文本。 然而! 这不是滥用状态码描述一种最佳做法,因为你不能保证用户的Web客户端将读取与否(赞成只读取状态代码,并使用标准的HTTP说明)。 我只想建议,如果你的状态的描述很简单,你控制的服务器和客户端(所以你知道你做了什么),使用这种方法。 根据我的经验,这种方法非常有效的代码的5XX范围内,但我不会将其用于其他东西。

你的第二个选择是你已经在做的事情:返回一个错误状态代码和消息的正文中的错误的描述。 这是一个最好的做法; 如果是为你工作,没有必要改变。 这是认为这是“附加信息中的错误”,而不是错误消息本身(这将是在HTTP响应状态代码后的文本)可能有帮助。



文章来源: Rest WebService error handling