Web services Web服务实现更改

Web services Web服务实现更改,web-services,versioning,soa,Web Services,Versioning,Soa,在不创建新服务版本的情况下,web服务提供商应该在多大程度上限制实现更改?一种观点认为,只要合同得到维护,服务所有者就可以根据需要自由更新实现。模式并不总是气密的,可以预见,服务实现中的更改会影响服务输出,同时仍然维护契约 应在多大程度上通知消费者实施变更?通知用户您自己的web服务实现的更新是一件事。跟踪所有下游依赖项的实现更改的可行性如何?当服务所有者知道更改可能会影响消费者时,他们是否应该创建新版本?努力做一个好公民,并将所有其他变化通知消费者 很多问题,我怀疑是否有一个适合所有人的答案。

在不创建新服务版本的情况下,web服务提供商应该在多大程度上限制实现更改?一种观点认为,只要合同得到维护,服务所有者就可以根据需要自由更新实现。模式并不总是气密的,可以预见,服务实现中的更改会影响服务输出,同时仍然维护契约

应在多大程度上通知消费者实施变更?通知用户您自己的web服务实现的更新是一件事。跟踪所有下游依赖项的实现更改的可行性如何?当服务所有者知道更改可能会影响消费者时,他们是否应该创建新版本?努力做一个好公民,并将所有其他变化通知消费者


很多问题,我怀疑是否有一个适合所有人的答案。这完全取决于形势。也许这就是SLA的作用。

好问题,我想你已经回答了。是的,这些细节将在SLA中,我认为如果契约/WSDL是相同的,那么为什么服务需要通知其“消费者”?当然,除非服务影响响应时间和性能。当引入另一个合同时(除了原始合同之外),该服务可能会通知消费者。消费者会意识到任何新功能,如果需要,可以相应地调整他们的客户端。

我所处的环境中,内部客户端不存在SLA,因此如果没有SLA,以下是一些常识指导原则

  • 尝试限制对服务的修改次数
  • 传达服务实现版本,以便使用者可以规划测试周期
  • 向消费者提供直接下游依赖项列表和位置,以查找他们的时间表和发行说明
  • 如果实现更改将在语义上影响使用者,请考虑新版本

  • 很大程度上取决于你的具体情况。总的来说,这里有几个首要考虑因素

    服务契约和模式是服务和客户机共享的所有内容。不改变契约或模式的服务实现更改(例如,修复实现逻辑中的错误)不需要通知客户端,也不应将其视为新版本

    OTOH,如果你有一个构造糟糕、过于松散的合同,比如将所有数据作为一个大字符串传递,客户必须进行广泛的解释才能使用服务,而现在你正试图以一种可能会破坏客户的方式利用这个过于松散的合同,那么你有义务让各方都改变合同(并对其进行改进!)并将其作为该服务的新版本发布

    由于服务通常用于实现服务之间的松散耦合,因此有时识别服务的所有客户端是不实际的,甚至是不可能的。在这些情况下,生成服务的新版本通常需要在一段时间内维护服务的多个版本,通常是按照某些治理机构的指示。

    提供有关服务实现、实现依赖性等的详细信息,通过披露客户可能依赖的非合同相关细节,鼓励创建紧密耦合。这可能会限制服务独立于客户进行更改的能力

    书 托马斯·厄尔(Thomas Erl)是关于这个主题的一个很好的资源,他详细介绍了几个常见的场景