首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小化RESTful Java生态系统中内部子系统之间依赖关系的策略

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

Stack Overflow用户
提问于 2011-07-27 00:49:11
回答 2查看 163关注 0票数 2

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

由于一个API可以为多个客户端提供服务,因此协调每组相关子系统的发布并不是一个有吸引力的选择。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-27 00:56:56

一种选择可能是使用诸如protocol buffers之类的东西在子系统之间进行通信。据我所知,它们正是为您所描述的事情而设计的,特别是在进行兼容版本更改方面。

票数 2
EN

Stack Overflow用户

发布于 2011-07-27 01:02:09

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

代码语言:javascript
复制
ClientA uses InterfaceA
ClientB uses InterfaceA
...

在SOA世界中,通过对不同的(WSDL、XSD)版本进行命名空间来解决这个问题,这样您就可以围绕接口实现一些治理:

Time t0

代码语言:javascript
复制
ClientA uses InterfaceA.v1
ClientB uses InterfaceA.v1

Time t1 (InterfaceA的新版本)

代码语言:javascript
复制
ClientA uses InterfaceA.v2
ClientB uses InterfaceA.v1

现在,您可以实现流程来强制ClientB在某个时间点迁移到InterfaceA.v2。一般而言,这些概念是为WS-*领域开发的,但您也可以将它们应用于RESTful领域(我曾多次这样做)。微软的一篇很好的文章:http://msdn.microsoft.com/en-us/library/ms954726.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6833624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档