转自:http://www.onmpw.com/tm/xwzj/network_45.html 源作者:迹忆
最近在工作中遇到这样的一个项目(暂且定为项目A),项目A本身是用PHP开发的,但是其数据是来自于另一个使用java开发的项目(暂且定为项目B),项目A不能操作项目B的数据库,它有其自己的一套数据库,只是有些地方需要用到项目B中的内容。所以在这里就需要一种通信方式,可以使B中的数据可以传到A中。很当然的就选择了Webservice,我使用PHP在项目A中搭建了Webservice服务,向B提供了我需要实现的接口,只要B调用相应的接口,按照接口要求的数据格式将数据传输到A中,这就大功告成了。
那Webservice究竟是个什么东西呢,刚开始使用的时候我在网上也查了很多的资料,下面就我自己对Webservice的理解向大家分享一下。
Webservice可以看做不同设备之间通信的一种标准,和具体的某种语言没有关系,如果非要说有关系的话,那就是每种语言都按照这个webservice标准来开发相应的函数以实现此标准。就向我上面说的项目B向项目A传输数据,需要按照这个Webservice标准来传输才可以成功。
当然对于上述案例如果说是项目A需要在本地存一份项目B中的部分数据,但是对于业务逻辑是和B没有关系的,那么就需要A来提供webservice服务,由B来调用接口发送数据,接下来就没有B什么事儿了,仅当B中相应数据有更新的时候,再次调用A提供的webservice接口更新A中的数据就可以了。但是如果业务是这样的,项目A不需要存B中的数据,它只是用B中的部分数据做展示,那我们就需要在B中搭建Webservice服务,提供相应的接口,由A调用B提供的Webservice接口以此取出B中的数据,那这样当B中数据有更新的时候,A调用的数据也是最新的。
上面说了这么多,无非就是一句话
Webservice是被定义用来使不同应用之间通过网络传输数据的一种标准,此标准和具体的语言无关,至于哪种语言提供接口,哪种语言来调用要看项目的需要。
既然是一种标准,那就需要有相应的技术来支持这个标准的实现。下面就出现了Webservice中的四种技术——XML、WSDL、SOAP、UDDI。在一套完整的Webservice服务中,这四种技术各有其自己的实现价值,下面分别来介绍一下各自的用途
1.XML
XML是用来标记数据的(对于XML标签详细介绍,可以参考W3C),因为上面我们说过,webservice不依赖于某一门特定的编程语言。而不同的系统可能是使用不同的编程语言来开发,(如上:项目A使用PHP开发,项目B使用Java开发)所以说就需要一种方式来交换数据,这种方式同样不依赖于某种编程语言,大多数软件都集成了XML标签,因此使用XML格式的数据来实现数据的交换。
2.SOAP
SOAP是一种特殊的协议,用来传输数据。当调用方一旦发现提供Webservice接口的地址,它将会使用SOAP协议和提供Webservice的系统进行连接。
3.WSDL
WSDL用来描述客户端可以调用的接口的规则,所有这些规则定义在WSDL文件中,当有客户端发起调用的时候,Webservice提供方会参考这个WSDL规则来验证数据请求的合法性。
4.UDDI
UDDI列出了那些服务是可以被访问的。当一个系统需要数据的时候,首先它会先查找UDDI,找出从除了自己之外的那些可以获取到自己需要的数据的服务,然后进行链接获取数据。这一点有点类似于DNS的功能。
以上分别介绍了这四项技术在整个Webservice架构中的角色,下面我们将这四项连起来,看一下整个Webservice的架构是如何实现的。
首先,Webservice的提供方会在WSDL文件中新建一些接口的规则,然后将WSDL文件发送给UDDI进行报道注册。服务请求方(也就是调用Webservice接口的一方)会先连接UDDI来查询哪一个提供方有自己需要的数据,找到以后然后连接这个服务提供方,此时和提供方使用SOAP协议进行交互。当服务方收到请求以后,首先会对这个请求进行验证,验证的依据就是先前新建的WSDL规则。验证通过以后服务方会向请求方发送XML格式的数据,此时同样是使用SOAP协议进行交互。当请求方收到XML数据以后,请求方会使用XSD来验证此XML数据的合法性。验证通过以后再进行数据的处理。
整个过程可以用下图反映
以上就是整个Webservice的实现过程。看此过程总感觉和WEB应用的流程有些类似,首先需要将域名和ip地址绑定,在DNS中报道注册。当用户访问的时候,首先会带着域名去访问DNS服务器,DNS会解析域名到对应的ip地址,并将此信息返回给用户,用户得到ip以后,会根据ip去访问对应的网站服务,此时用户和WEB服务之间使用的是HTTP协议。
以上就是我对Webservice的理解,至于Webservice在什么情况下使用合适,我也不好说,我只能说这个得根据实际情况来定。我做的项目有限,虽说在网上看到过Webservice的使用场景,但是有些情况我并没有接触过,使用Webservice的益处和弊端也不好下结论。如果以后有幸接触到使用Webservice的其他的项目,我会再进行补充,更新此文章。当然如果大家有什么好的建议,欢迎在下面留言,大家共同探讨,共同进步。