休息WebService错误处理

Pra*_*arg 3 rest web-services

我正在使用RestWebservice进行一些基本操作,比如创建/搜索.请求xml看起来像这样

<customer> 
    <name/>
  .....
 </customer>
Run Code Online (Sandbox Code Playgroud)

为了成功操作,我返回相同的客户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>
Run Code Online (Sandbox Code Playgroud)

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

我真的很感激任何帮助.谢谢!

KP *_*lor 8

正确的REST错误方法是使用HTTP状态代码(因为它听起来像你在做).它们中有一个令人眼花缭乱的阵列(正如你在这里看到的那样),你可能会惊讶地发现有多少可能适合最常见的情况.

至于友好的错误消息,您有2个选择.首先,您可以在HTTP响应中的状态代码之后提供状态代码的文本描述(有关详细信息,请参阅有关HTTP的Wikipedia文章).此文本由服务器决定 - 而不是HTTP规范 - 并为您发送的特定消息提供一些灵活性; 大多数服务器端框架为您提供了一种以编程方式设置此文本的方法.然而!最好不要滥用状态代码描述,因为您无法保证用户的Web客户端是否会读取它(支持只读取状态代码和使用标准HTTP描述).我只建议使用这种方法,如果你的状态描述很简单,你控制服务器和客户端(所以你知道你得到了什么).根据我的经验,这种方法适用于5xx代码范围,但我不会将其用于其他许多代码.

您的第二个选项是您正在做的事情:将错误状态代码和错误描述作为消息正文返回.这是一种最佳做法; 如果它适合你,不需要改变.将此视为"错误的附加信息"而不是错误消息本身(这将是HTTP响应中的状态代码之后的文本)可能是有帮助的.