最近soa又火起来了,当初soa这个概念刚提出来的时候,各个厂家都往这个概念上靠,产生了很厚的泡沫,当然伴随着泡沫的破裂,很多先烈也随之倒下了。现在各大厂家又开始吹捧soa了,伴随而来的云服务,分布式计算等等,笔者今天和大家聊一下在soa化引申出来的两个解决应用集成的风格协议,restful与webservice。
restful与webservice都是为了解决关联调用的问题,它们都提倡关联调用的彻底解耦,但是在面对这个问题上,没有谁对谁错的问题,只是定位是不一样的。webservice是通过在服务方以wsdl的方式,发布一个服务,消费方通过url访问服务时,根据服务方所定义的wsdl,生成调用该服务的代码,实现远程调用。这个就有别于服务发布client包,消费方通过接口耦合的方式实现实现远程调用,这样就能保证消费方与服务方之间可以是不同的语言也能实现远程调用。但是webservice的服务方是占绝对的主导地位的,就是说我服务方定义的wsdl服务,你消费端就要按照我的规则来玩。
restful在解决这个解耦的问题上就有别于webservice,它的定位是消费方和服务方都是公平的,大家定义几个接口(GET,POST,DELETE,PUT...),双方就在约定的接口范围内玩,消费方可以通过任何的方式传输数据,只需要约定数据的格式以及接口就可以了。这里稍微拓展一下,上面所提到的定义接口为GET,POST,DELETE,PUT等只是目前比较流行的restful都通过http协议来传输,而不代表restful就是定义了GET,POST,DELETE,PUT这些接口。笔者觉得restful的设计思想可以与设计模式中的visitor pattern做类比,回想一下visitor模式的设计精髓,是把类变成方法,把方法变成类,而restful也正是如此,把原来的GET,POST,DELETE,PUT这些方法变成接口类,而uri则对应方法。
最后总结一下,设计本身是没有谁对谁错的,谁又能说通过client包的方式发布服务,存在接口依赖是错的呢?设计本身为了平衡,只是我们在设计的过程中,根据自己的定位做设计平衡而已。