深入浅出Web Service

来源:互联网 发布:java 文件上传类型 编辑:程序博客网 时间:2024/05/18 02:53

最近学校的某个俱乐部要搞Web Service,而我近期各种衰气侧漏,也研究了一下Web Service,想把我的成果与大家分享一下。

要了解Web Service,首先要知道它的起源,然后才能明白它的大致思想。在八十年代初期,各个计算机公司都墨守成规地发展CISC(复杂指令计算机系统),也就是说都想把自己生产的PC机的性能变得厉害一点,此外他们还拼命保护自己的技术,抢夺市场。就在这个时期,Sun公司一声炮响,提出了“网络就是计算机”的口号,它想开发面向网络的、RISC(精简指令计算机)、分布式的C-S结构的系统,挖掘网络的力量。这个思想就是对每个用户来说,网络就是是一个大的虚拟计算机,我们可以把用户的请求分散到网上的各个可用的计算机(或其他资源)上,让这些资源处理用户的请求。当时大家都以为这是Sun公司的一个宣传口号,但现在,我们不得不佩服Sun公司的远见卓识以及这个思想的睿智。这个思想,就是今天与计算、分布式计算、以及Web Service的起源。

W3C组织对Web Service的官方定义是:Web Service 是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序的接口所组成的,它们通过网络,例如国际互联网的远程服务器端,执行客户所提交服务的请求。

其实说的贴近群众一点,Web Service就是一个函数的远程调用。比如我有一个Web Service,它实现的就是一个求和的函数,当用户请求我的Web Service时,通过网络给我两个数13和14,我调用了这个函数计算了一下,得出结果27,之后再通过网络返回给用户,这就是一个简单的Web Service的模型。可能再牛B一点,我的Web Service还可能调用其他的Web Service以相同的方式来获取数据,许多个这样的模型也就实现了“网络就是计算机”的构想。

 

 那么Web Service是如何实现的呢?它的实现有两个关键的点:动态连接和一系列的标准和协议。

动态连接,顾名思义,就是你的应用程序按正确的方式请求某个Web Service,Web Service会给你答复。这样就保持了一个动态的连接。此外,这样的方式还有一个好处就是,不论你怎么改变你Service内部具体的实现,只要你的Web Service提供给调用者的接口不变,那么调用者就可以照旧使用你的Web Service,这样就降低了你的应用与网络之间的依赖,使整个模型更加健壮可行。

一系列的标准和协议,主要有这么三个东西要清楚。

第一是SOAP协议,全称是Simple Object Access Protocol( 简单对象访问协议)。这里面的“对象”不是我们平常的OOP中的面向对象里的“对象”,是个广义上的对象。我们完全可以把Web Service的函数看做是一个对象,把你的应用程序看成是一个对象等等。相信你已经对这个SOAP协议有了一个感性的认识了。其实它主要规定了这么几件事:第一它规定了Web Service与调用者的信息传递采用XML格式(XML的优点我就不再赘述,什么与平台无关啊等等,想了解更多去Google吧)。第二它规定了XML与参数类型的映射,也即Web Service所需的参数如何包装成XML供双方通信。第三它规定了异常处理的相关信息,也即出现异常要采取什么措施,转向什么处理等等。

第二是WSDL语言,全称是Web Services Description Language(网络服务描述语言)。它是一种语言,也使一种标准。这货本质也是一个XML格式(样例WSDL)。它向调用者提供了某个Web Service的信息。包括传什么参数,命名空间是什么,返回值是什么等等。这样,采用统一的语言(或者说标准)来描述某个Web Service,既方便人阅读理解,又可以让IDE解析该文件,自动生成该Web Service的调用程序框架,方便使用。

第三是UDDI,全称是Universal Description, Discovery, and Integration(统一描述、发现、集成)。UDDI是一个公开的标准,以结构化的形式让Web Service的提供者来注册,并让服务使用者查询。这样所有的WSDL文件就可以集中存放在UDDI上,实际上UDDI起着索引服务器的作用。

可能有点懵,它们的关系图如下:

在Web Service的协议方面,它的协议栈如图:

可以看到,Web Service最底层的协议是http协议,相信什么好处你也能猜到,对,就是防火墙。Web Service可以自由穿越防火墙,要知道很多服务器或终端或节点的防火墙都是只允许http协议的连接自由通过。

说了这么多,相信你也能对Web Service有一定的认识了,你自己也能通过强大的eclipse做一个Web Service,或做一个Web Service 的客户端,详见本博客其它文章。

当然,Web Service也有一定的缺点,以下是我通过查资料得到的一些看法。

第一,Web Service会造成一定程度的资源浪费。这个很容易理解。传递信息用XML,纯文本,那么双方解析数据肯定要消耗额外的CPU资源和内存资源(感觉这个浪费相比Web Service的优点来说太微不足道了);其次,传纯文本肯定没有直接传二进制来得快,也即会浪费一些网络资源。

第二,Web Service的数据传递的颗粒度较大,也即他把结果直接打个包丢给你。因此,它不适用于基于对话的,数据颗粒度较小的应用中。

第三,数据转换存在限制。因为不是所有的数据都能方便的转换成XML,比如面向对象语言中某个类的实例等等。

第四,,学习要求高,技术曲线长。前面听起来或许感觉Web Service很容易,但是你要想真正开发出一款成熟健壮的Web Service,必然要学习很多具体的技术,而且,这些技术还在不断发展。

其实说这些是缺点也有一定道理,读者可以辩证地借鉴一下。

Web Service有很多应用。现在也有很多成熟的Web Service。比如eBay网商品价格查询等等,有一个网站叫“Xmethods”,里面有很多有用的Web Service的信息,可以百度一下。

主要的应用有这么三类:

一:公司或个人的咨询查询提供,如查询美国的邮编区号,查询延迟20秒的即使股票信息等等;

二:资料档案的分散存取及服务,如提供一兆的自由存取空间的服务,FTP服务等等。

三:数据远端分散运算,如根据当前汇率提供转换业务等。

以上Web Service均可在Xmethods网站上搜到。

一些有用的链接可参考本博客另外文章。

注:本文章版权归作者所有,转载请注明出处http://blog.csdn.net/liushuaikobe/article/details/6999246。

 

原创粉丝点击