Web service是什么?

作者: 阮一峰

日期: 2009年8月26日

我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上。

我把学习笔记和学习心得,放到网志上,欢迎指正。

今天先写一个最基本的问题,Web service到底是什么?

一、Web service的概念

想要理解Web service,必须先理解什么是Service(服务)。

传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service)。比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务"。通俗地说,"服务"就是计算机可以提供的某一种功能。

根据来源的不同,"服务"又可以分成两种:一种是"本地服务"(使用同一台机器提供的服务,不需要网络),另一种是"网络服务"(使用另一台计算机提供的服务,必须通过网络才能完成)。

举例来说,我现在有一批图片,需要把它们的大小缩小一半。那么,我们可以把"缩放图片"看成是一种服务。你可以使用"本地服务",在自己计算机上用软件缩小图片,也可以使用"网络服务",将图片上传到某个网站,让服务器替你缩小图片,完成后再通过网络送回给你。这就好比,一件事你可以自己做,也可以交给另一个人去做。肚子饿了,你可以自己做饭,也可以打电话去订一份比萨,让店家替你做好送上门。

"网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源。

举例来说,去年我写过一个"四川大地震图片墙",它能动态显示关于四川地震的最新图片。但是,所有的图片都不是储存在我的服务器上,而是来自flickr.com。我只是发出一个动态请求,要求flickr.com向我提供图片。这种情况下,flickr.com提供的就是一种Web service。如果我把图片都存放在本地服务器,不调用flickr.com,那么我就是在使用"本地服务"。

所以,Web service让你的网站可以使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。

二、Web Service架构和云

如果一个软件的主要部分采用了"网络服务",即它把存储或计算环节"外包"给其他网站了,那么我们就说这个软件属于Web Service架构。

Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。比如,如果你要开发一个相册软件,完全可以使用Flickr的网络服务,把相片都储存到它上面,你只要全力做好相册本身就可以了。总体上看,凡是不属于你核心竞争力的功能,都应该把它"外包"出去。

最近很红的"云计算"(cloud computing)或者"云服务"(cloud services),实际上就是Web Service的同义词,不过更形象一些罢了。它们不说你把事情交给其他计算机去做,而说你把事情交给"云"去做。

三、本地服务的缺陷

"网络服务"是未来软件开发和使用的趋势,本地服务将用得越来越少,主要因为以下三个原因:

* 本地资源不足。很多数据和资料,本地得不到,只有向其他网站要。

* 成本因素。本地提供服务,往往是不经济的,使用专业网站的服务更便宜。这里面涉及硬件和人员两部分,即使你买得起硬件,专门找一个人管理系统,也是很麻烦的事。

* 可移植性差。如果你想把本机的服务,移植到其他机器上,往往很困难,尤其是在跨平台的情况下。

四、Web Service的优势

除了本地服务的缺点以外,Web Service还有以下的优越性:

* 平台无关。不管你使用什么平台,都可以使用Web service。

* 编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Web service。这大大增加了web service的适用性,降低了对程序员的要求。

* 对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。

* 对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup),因此能够做出一些以前根本无法想像的事情。

五、Web service的发展趋势

根据我的观察,目前Web service有这样几种发展趋势。

* 在使用方式上,RPC和soap的使用在减少,Restful架构占到了主导地位。

* 在数据格式上,XML格式的使用在减少,json等轻量级格式的使用在增多。

* 在设计架构上,越来越多的第三方软件让用户在客户端(即浏览器),直接与云端对话,不再使用第三方的服务器进行中转或处理数据。

(完)

珠峰培训

stuQ

留言(72条)

而且是异步的,因此受到广泛欢迎

推荐雅虎的YQL

不过如果这个网遇到一堵墙又该怎办。安全性也是个问题。

怎么没人扯淡?大
家用什么浏览器?

开发api是大趋势,社会化网络很吸引人,该死的gfw

主力firefox,试用&适应chrome

太好了,这是我ServiceScience的主攻方向。未来是服务的未来。

那会不会涉及版权之类的问题啊?

基本不会涉及到版权问题,因为API都是人家开放了我们才能用。而且,人家还乐意让你用呢...

API是主流了。现在开心农场都是这么搞的

感觉云计算,SaaS都是WebService的具体表现或延伸

阮哥你好,虽然订阅你的博客才一个多月,从你的文章里还是蛮有收获的,与你所关注的东西也有挺多重合,会长期订阅这个网站的。
最近想翻译一本书,综述、技术类的,希望扎实技术的同时练练英语水平。以前没有做过这方面的工作,又不想盲目开始以致翻译质量太差,所以请教大哥一点这方面的注意事项或是推荐些相关文章。多谢!!

我是IT外行,请问web service是免费的吗?
对于外包的服务,如何监督保证它的质量呢?

再次希望了解博主的专业方向和自己学习的经历,对我们可能会有很大的帮助

引用LC的发言:

我是IT外行,请问web service是免费的吗?
对于外包的服务,如何监督保证它的质量呢?

有收费的也有免费的。至于质量,如果不行的话,当然就不会有人用它了

引用salmon的发言:


最近想翻译一本书,综述、技术类的,希望扎实技术的同时练练英语水平。请教大哥一点这方面的注意事项或是推荐些相关文章。多谢!!

这个没有窍门,主要还是读懂原文。我一时想不出可以推荐哪些文章,我自己的学习经验就是多读一些中英对照的优秀译文。

引用Ruan YiFeng的发言:

这个没有窍门,主要还是读懂原文。我一时想不出可以推荐哪些文章,我自己的学习经验就是多读一些中英对照的优秀译文。



我想还是先译几章,看看翻译过程中都会出现哪些问题再针对问题学习。可能这样就会影响进度了,呵呵。多谢!

能介绍一个,进入这一方向的研究,须要具备的一些相关基础吗?

我才接触web Service, 感情看了博主的介绍,清楚了一些,有些地方的介绍满不清楚的哈!你写的比较白话,嘿嘿!很多地方都搞了一堆的英文简写!

小伙子说的相当不错

希望阮大哥继续往下写啊!

继续关注

我是个初学者,看了这篇文章才对web service有了一点了解,想了解点这方面的东西,只看了xml的一点内容。希望您能提供一点相关的连接或者提供一些比较权威的文章参考一下!谢谢拉!

关于传输方式,soap也是用的http协议吧,http的get方法只是http的内置方法,在rest风格的架构中,是基于http协议的,使用http协议的post、delete ,put、get方法分别对应增、删、改、查。我觉得是基于soap的在减少,基于rest的在增多

我原来只知道有WebService这个东东,但看了阮大哥这篇文件后,我才明白Webservice是这样一个东东,你的文章很容易让人理解。谢谢啦!

确实是个好东西,WebService用的地方越来越多了。

确实不错,看到其他解释的都比较笼统,看完这篇文章,言简意赅!学习了!

你好
想多了解点webservice的东西
能加QQ么 304491875

受益匪浅!
谢谢了!
希望还能看到weblogic相关的知识.

正想学习webservice,文章写的非常好....期待..

学习了,谢了阮大哥

谢谢阮哥的分享。同时也希望阮大哥能再继续写下去,为我们初学者提供帮助。

才面试问我webservers是什么,我不知道,现在我知道了呵呵,谢谢!

很厉害。深入浅出。
想请问。如果想自己学习WEB SERVERS
有什么比较好的网站和资料。

以前对web service是一头雾水,今天终于有点明白了,谢谢!

站在对立面的角度看:为他人做嫁衣裳。就像一个网站里面嵌套了百度或者谷歌的查询功能一样,最终的请求还是到了人家的服务器上的,你只不过是人家的webservice的一个展台,大部分的流量还是流向了别人的服务器上去了,再一个就是,用户对你的网站没有什么依赖性的,因为从你这里获取的信心在别人的网站也同样能获取到,其实说白了就有点向广告联盟一样,最总收益的还是webservice提供商

ls注意,Web Service的核心思想就是把“非核心”的功能外包出去,专心开发“核心”功能。亚当‧斯密所谓的分工带来社会进步指的就是这种情况。而ls的例子明显毫无所谓核心可言,以大公司为对手,却毫不犹豫地抛弃中小网站的撒手锏--以“个性化”“独创性”来细分市场,而是依附对手的“云”以图方便。说难听点,死了才利于市场经济的建立和完善。

不过这篇对于Web Service的简介却只字不提它的缺陷--虽然我也不清楚缺陷是什么--这会使人对此更为怀疑。
不妨做个猜测,希望有人予以解答:我觉得“云”会妨碍互联网的“去中心化”,而后者是许多东西生存的土壤,如BT,又如WIKI解密

在国外有很多成功的例子,比如dropbox,就是用亚马逊的存储。但是在中国呢?这样的例子一个都很难找到。

淘宝,也开始做b2c。

讲的很通俗易懂。。但是,LZ好像混淆了好多概念。个人感觉,LZ所解释的web服务是一个整合后的概念,而不是真正的web service.比如,你可以说客户端可以通过web service请求flickr.com里的资源,但你不能说flickr.com就是web service(当然,它是一种通过网络提供的服务,也就是您所说的web服务)。web service其实是一组API,将服务器上的功能暴露出来以供客户端访问。。其实在.net中,web service已经渐渐被放弃而转向wcf了。

最好不要去定义一个本来就非常概念化的概念,去wiki或者百科上都能看到。

你好。我有个疑问,web service是不是可以理解为需要利用网络上的资源来完成某项任务的都可以说是web service架构?你这里是特指利用的是其他网站上的资源。。

这么一说我似乎明白了一点

我不知道 云 和wenservice的关系,但是按照您的思路下去,我一下子明白了。
如果写技术文章的人都跟您一样的思路清晰,那该多好啊!

楼主,不得不佩服,这篇文章讲的太精辟了,看了一大堆百科、文摘看的晕头转向,看了你这篇文章三言两语就讲清楚了什么是“Web Service”,举的例子很恰当,赞!

写得很简单明了,比书上罗嗦一堆好的多的多。

阮大哥,写的太好了,通俗易懂,很受用……

说的很清楚,从来没看到过这么形象的介绍webservice的文章!作者太有才了。
不过感觉把云计算理解为webservice的同义词似乎不太贴切,个人认为云计算是包含webservice的。

写的很简洁易懂,即便有些解释得不够到位的地方,只要中心思想让我们理解了,其他的我们可以再查更专业更深入的资料。非常感谢!

这个好,一看就明白

刚刚看完web service....迷迷糊糊的。看完了你的文章让我真的清醒过来了。。谢谢。。

安全,隐私,稳定~~就成核心问题了~

搜索一些信息的时候,发现好多次,你的文章都排在首位。最深的印象是关于协议讲解的那篇,这篇文章也一样,一点水都没有,都是实用而且易懂的东西,thank you :)

其实我跟一峰的理解基本上差不多

对本地服务,除非是大型局域网或者说ejb这类局域网协议访问,不然的话没啥意义

现在市面上有面向过程、方面、模块化编程,当然最多的是应该是面向对象,

与其说对象编程,不如说是类编程,软件即服务,若软件不能提供功能(接口方法),

也就失去原本意义,它的灵活性,独立,跨平台、跨语言

当然一峰应该添加下 SOAP,\(^o^)/~

写的很好啊,不想有些博客,憋几个英文词出来就以为自己了不起了

web service不应该是一种强制,而是“系统/服务”优化的一种自然而然的方向。

发现这篇用来科普 web service比百科还靠谱!理解了。

理解了,写的好,百度百科就是个垃圾

写的挺好,看的通俗易懂

我浏览文章从来都不留言的,不过这次我非常感谢你的介绍,深入浅出,对我这种初次接触Web Service的人来说受益匪浅。

云计算让 今后的个人PC向简单的输入输出设备发展。
所有的运算,计算功能都会放到云端。

真的太简明易懂了,我看了wiki和baike,东西很多,但看完了还是云里雾里,以为web service很高深,距离我很远,一看你但文章才发现原来我也正在用着web service呢!

之前看过相关的文章,似懂非懂的,看这个清晰多了,很好

真的太简明易懂了

阮老师,您这篇文章要是换个视角来说,应该会更好理解。在文章中,您引导读者站在WebService使用者的角度来认识它,我个人认为,把这种视角换成提供者,是否理解起来更好一些?

阮老师,您介绍的真是太明了了,把我从一堆浆糊中拉了出来。多谢!期待继续!

浅显易懂

本地服务的缺陷,加1条(个人看法):
1.程序和数据在本地,也不安全。除非有周密的备份方案,个人做比较难。数据更新频繁时,很保证数据安全。

阮老师,您的博客内容很棒。时间长了,评论会很多条,不方便查阅。这里有几点改善的建议:
1. 评论按排序权重由大到小排列。权重因子包括:
1)评论提交的时间越新,权重越大。
2)给品论添加用户点赞或者评分功能,点赞或者评分积累量越大,权重越大。
2. 评论只显示前N条,比如10条,其他的品论在需要时,点击“更多评论...”来展开。

通熟易懂啊,谢谢老师

阮老师的这篇文章讲得真是通熟易懂。用简单易懂的语言科普技术问题,真的需要很深的技术功底和很强的文字能力才能完成哦。

技术上的原创博客, 我好些只看到苑一峰在说人话, 还有一个 老姚

谢谢峰哥的讲解,非常棒的一片博文

谢谢,看了好几篇帖子理解webservice,这个最赞

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接