我使用的web服务使用XSD来描述其API。最近,他们在没有xsd:any的回复消息中添加了一个字段,所以当我们的模式验证器试图验证前一个xsd时,它失败了。我们认为这是向后不相容的,于是我们开了一张票。
他们的架构师回答说,我们应该验证我们发出的消息(请求),但不要费心去验证回复。我们应该在回复中选择我们想要的字段,而忽略其余的字段。他还说,我们应该将模式验证器设置为忽略“新”字段,并验证其余字段。
如果某些模式验证器存在这样的设置,那么这个架构师可能没有错,但另一方面,如果我的应用程序中断是因为我不需要关心更改(或创建)字段,这不意味着违反了界面偏析原理吗?我是否真的可以零敲碎打地验证对象的各个字段,而不是期望它是完全正确的呢?
我意识到,不验证来自外部服务的传入数据也具有安全含义,但在这个问题中,我试图更多地了解体系结构原则,而不是安全方面。
发布于 2015-06-03 16:19:32
他们的架构师回答说我们应该验证我们发出的消息(请求).
他们不是在实践他们所宣扬的。如果是的话,您将收到对XSD有效的消息。
问题肯定站在他们这一边,他们应该解决这个问题,但在现实世界中,我们经常要解决别人创造的问题,所以你可能需要“不用费心去验证答案”,只是为了保持现状。
在一般的Internet协议中,我们尝试在容忍不符合标准的输入的同时产生符合标准的输出。我正试图找到关于HTML或HTTP (或其他什么)的RFC,这些都是这样的,但此时运气并不好。但问题是,在你这一边保持宽容有助于让事情保持平稳,尽管它感觉很脏。
发布于 2015-06-03 18:51:25
如果您使用答复作为输入到您的系统,那么您肯定应该验证它们。如果您只是检查成功或失败,并可能记录一些返回的If,那么您可能不需要验证,但我同意您应该让web服务人员修复他们的问题。如果它们进行了不向后兼容的更改,则应该有适当的程序将您切换到新版本的服务。希望这将使他们对未来的模式设计更加小心!
发布于 2015-06-07 13:57:19
我猜,如果有一个XSD模式,您应该能够根据它验证一切。这就是itS存在的目的;)
所以,我想他们只是需要发布一个新版本的模式,让您更新您的软件。
至于在回复中添加一个新字段.如果没有模式,我认为这不应该被视为BC中断。当您设计API使用者时,您应该尽可能地敏捷。移除某个字段或更改其格式对您来说应该是BC中断。但是增加一个新的不应该。
https://softwareengineering.stackexchange.com/questions/285727
复制相似问题