最小化RESTful Java生态系统中内部子系统之间依赖关系的策略

时间:2011-07-26 16:49:11

标签: java web-services rest

我们系统的架构是有一组功能细分的RESTful子系统。许多这些子系统不仅要响应来自浏览器的请求,还要响应其他子系统的请求。子系统间流量相对较大且需要扩展,因此决定使用序列化Java bean作为此类通信的表示(由于序列化/反序列化的速度)。这又引入了具有客户端/服务器关系的子系统之间的二进制依赖性。更改通过RESTful API公开的Java bean的内部结构可能会对客户端子系统产生版本兼容性后果。当然,改变任何内容类型的表示结构都会产生兼容性问题,但这显然更糟。

由于一个API可以为许多客户端提供服务,因此协调每组从属子系统的版本是一个不具吸引力的选择。

这一定是一个常见问题,我想知道其他人如何解决/缓解?

2 个答案:

答案 0 :(得分:2)

一种选择可能是使用诸如protocol buffers之类的东西在子系统之间进行通信。根据我的理解,它们的设计仅适用于您所描述的类型,特别是在进行兼容的版本更改方面。

答案 1 :(得分:1)

我不确定我是否正确理解你的问题。我想这是关于界面版本控制,例如一个操作和/或对象可能存在于不同的版本中,并由不同的客户端系统使用,例如:

ClientA uses InterfaceA
ClientB uses InterfaceA
...

在SOA世界中,它通过命名空间来解决不同的(WSDL,XSD)版本,以便您可以围绕接口实现一些治理:

时间t0

ClientA uses InterfaceA.v1
ClientB uses InterfaceA.v1

时间t1(InterfaceA的新版本)

ClientA uses InterfaceA.v2
ClientB uses InterfaceA.v1

现在,您可以实施流程以强制ClientB在某个特定时间点迁移到InterfaceA.v2。一般来说,这些概念是为WS- *世界开发的,但您也可以将它们应用于RESTful世界(我这样做了好几次)。一篇不错的MSFT文章:http://msdn.microsoft.com/en-us/library/ms954726.aspx