我的应用程序发送给第三方SOA服务器的数据是复杂的XML。服务器所有者确实提供XML模式(.xsd),并且由于服务器使用无意义的消息拒绝无效的XML,因此我需要在发送之前对其进行本地验证。
我可以使用独立的XML模式验证器,但它们很慢,主要是因为解析模式文件所需的时间。所以我写了我自己的模式验证器(在Java中,如果重要的话)以缓存已经解析的模式的HTTP服务器的形式。
问题是:许多事情在验证过程中可能出错。除了意外的例外和成功的验证:
>服务器可能找不到指定的模式文件
>指定的文件可能不是有效的模式文件
> XML对模式文件无效
由于它是一个HTTP服务器,我希望为客户端提供有意义的状态代码。上述情况下服务器是否应答400错误(错误请求)?或者它们与HTTP无关,它应该在身体中有一个消息回答200?任何其他建议?
更新:主应用程序是用Ruby编写的,它没有一个好的xml模式验证库,所以单独的验证服务器不会过度工程化。
将验证过程中的错误情况映射到有意义的HTTP状态代码,这是一个非常有效的思路。
我想你使用URI将XML文件作为POST内容发送到验证服务器,以确定特定的验证模式。
所以这里有一些错误映射的建议:
> 200:XML内容有效> 400:XML内容格式不正确,标题不一致,请求不符合RFC 2616的语法> 401:在缓存中找不到架构,服务器需要使用凭据来与第三方SOA后端进行身份验证,以获取模式文件> 404:找不到模式文件> 409:XML内容对指定的模式无效> 412:指定的文件不是有效的XMl模式> 500:验证服务器中的任何意外异常(NullPointerExceptions等)> 502:在缓存中找不到模式,并且尝试从第三方SOA服务器请求它失败。> 503:验证服务器正在重新启动> 504:请参阅502 with reason = timeout