我使用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>
现在,我不知道,这是否发送错误到客户端的正确途径。 也许这应当存在于所述响应的报头中。
我会很感激的任何帮助。 谢谢!
我会在包裹“请求”或“响应”包装的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响应状态代码后的文本)可能有帮助。