计算机的服务一般指的就是计算机能提供的某一功能,比如qq能提供聊天服务,杀毒软件能提供杀毒服务。而通常情况我们把服务分为两大类,分别是本地服务(本地提供,不需要通过网络获取)和网络服务(即webservice,需要通过网络获取)。
接下来我们简单比较下这两种服务。
本地服务 | 网络服务 | |
---|---|---|
实现方式 | 利用本地资源实现,需要掌握实现方式 | 通过网络获取,不需要知道怎么实现 |
实现成本 | 需要自己承当人力物力,成本较高 | 只需要远程调用,成本较低 |
稳定性 | 自己实现,自己维护,稳定性相对较高,且不依赖互联网,断网风险小 | 依赖互联网,服务出现问题维护相对较麻烦,但成本不一定高 |
移植性 | 较差,换个系统要实现改服务要重新开发 | 较好,可以快速移植 |
图表的内容可能比较抽象,我们不妨举个例子来体会下。
假设我们要实现一个天气预报的服务,如果我们采用本地服务,首先我们得发送一个气象卫星,然后我们还要能接收并处理卫星数据的设备,有了数据之后我们有专门的科学家分析这些数据,然后通过工程师用图表的形式展示出来。
如果某天公司业务要拓展,我们需要在一个新环境下实现气象服务,如果是本地服务,我们又得重新去实现一遍。而如果是网络服务,我们只需要把接口重新在新环境下调用即可。
因此,我们可以发现,本地服务的实现成本会远高于网络服务。特别是对于那些非核心的服务,如果我们都要亲力亲为去自己实现,无疑会增加自己的负担。同时本地服务的移植性也不如网络服务,因此网络服务就成为一个异常重要的发展方向。
如上文所说,网络服务(webservice)就是将某一服务通过互联网发布并被用户所获取的某一计算机功能。如前面说的气象服务,比较常见的还有微信公众号开发时我们可以调用的各种接口(如自动回复、支付、识别发送的信息类型等接口),腾讯地图提供的地图接口,支付宝提供的支付接口等等。这些网络服务加上我们本地的核心功能共同构成了一个完整的系统。
如果一个软件的主要部分采用了"网络服务(webservice)",即它把存储或计算环节"外包"给其他网站了,那么我们就说这个软件属于Web Service架构。
Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。
webservice优势
平台无关。不管你使用什么平台,都可以使用Web service。
编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Web service。这大大增加了web service的适用性,降低了对程序员的要求。`
对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。
对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup),因此能够做出一些以前根本无法想像的事情。
广义上的Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。
但是现 在我们说webservice一般是指XML Web Service WebService。它是通过soap在web上提供的软件服务,用wsdl进行描述,并通过uddi进行注册。
webservice之所以能够实现跨平台跨语言之间的调用,是因为它定义了一个统一的信息交互和调用的标准。正如上文所说,webservice的实现需要依赖几个重要的技术:XML,soap,wsdl和uddi。
webservice最关键的一环就是soap,即把数据以xml的形式组合起来,然后通过http协议与远程服务进行通信,我们把用xml组合的数据格式统一,称为soap消息,这就成了我们跨平台跨语言通讯的关键。
当然不得不承认,soap格式的报文存在严重的冗余,并且依赖定义好的xml schemas,我们如果手动创建soap消息会特别麻烦,需要借助一些工具来简化一些工作,因此现在很多webservice的开法越来越趋向于restful风格的webservice。
如图所示,一个完整的webservice过程可以概括为以下步骤:
webservice除了httpsoap调用,也可以用get和post方法来调用,但是soap可以传递结构化的数据,而post和get方法不行。
在java web中,我们要调用webservice,通常是要先利用相应框架(如axis2等)生成webservice的对应client,然后通过调用client里面的相关方法来实现对webservice的调用。
webservice一个最大的特点就是与语言无关,所以webservice用什么语言开发其实都可以。现在用的比较多的是c#和java,这里我们主要介绍java关于webservice的开发。
java开发web service的框架常见的有Axis,axis2,Xfire,CXF以及JWS,其中axis2和cxf是目前最为常用的框架。axis2可以看作是一个小型的应用服务器,相对来说会比较重,但是它功能强大,支持多语言,在大型项目被较多地使用。