我们系统的架构是这样的,即有一组功能上细分的RESTful子系统。这些子系统中的许多不仅要响应来自浏览器的请求,还要响应其他子系统的请求。子系统间的通信量相对较大,需要进行扩展,因此决定使用序列化的Java bean作为此类通信的表示(由于序列化/反序列化的速度)。这进而在具有客户端/服务器关系的子系统之间引入了二进制依赖关系。更改通过RESTful API公开的Java bean的内部结构可能会导致客户端子系统的版本兼容性问题。当然,更改任何内容类型的表示的结构都会有兼容性问题,但这显然更糟糕。
由于一个API可以为多个客户端提供服务,因此协调每组相关子系统的发布并不是一个有吸引力的选择。
这肯定是一个常见的问题,我想知道其他人是如何解决/缓解的?
发布于 2011-07-27 00:56:56
一种选择可能是使用诸如protocol buffers之类的东西在子系统之间进行通信。据我所知,它们正是为您所描述的事情而设计的,特别是在进行兼容版本更改方面。
发布于 2011-07-27 01:02:09
我不确定我是否正确理解了你的问题。我猜这是关于接口版本控制的,例如,一个操作和/或对象可能存在于不同的版本中,并被不同的客户端系统使用,比如说:
ClientA uses InterfaceA
ClientB uses InterfaceA
...在SOA世界中,通过对不同的(WSDL、XSD)版本进行命名空间来解决这个问题,这样您就可以围绕接口实现一些治理:
Time t0
ClientA uses InterfaceA.v1
ClientB uses InterfaceA.v1Time t1 (InterfaceA的新版本)
ClientA uses InterfaceA.v2
ClientB uses InterfaceA.v1现在,您可以实现流程来强制ClientB在某个时间点迁移到InterfaceA.v2。一般而言,这些概念是为WS-*领域开发的,但您也可以将它们应用于RESTful领域(我曾多次这样做)。微软的一篇很好的文章:http://msdn.microsoft.com/en-us/library/ms954726.aspx。
https://stackoverflow.com/questions/6833624
复制相似问题