SOAP的S是Simple

标签: Web开发 轶事趣闻 SOAP WDSL XML | 发表时间:2011-01-27 00:47 | 作者:陈皓 Jo
出处:http://coolshell.cn

曾经有一个争论,一边是站在SOAP这边的人,另一边则是其它人。 站在SOAP这边人,当他们在争论SOAP和Web Service框架的复杂度时,SOAP这边的人说,在引入那些WS-*东东之前,SOAP的确是简单的,这就是为什么SOAP的第一个字母S就是Simple。

在2000年的时候,有一个苦恼的程序员,

程序员: 不好意思,我的老板这周末去打高尔夫了,现在我不得不要搞一个SOAP的应用,但是我根本不知道什么是SOAP。SOAP专家,你能帮我吗?

SOAP专家: 当然可以。首先,我要告诉你,SOAP 就是 Simple Object Access Protocol.

程序员: 哦,那么说来,他是简单的罗?

SOAP专家: 简单的就像星期天一样,我的朋友。

程序员: OK,快跟我说说。

SOAP专家: 好,就像他的名字一样,SOAP用为远程对象访问。

程序员: 像CORBA一样?

SOAP专家: 正是如此,就是像 CORBA,只是更简单。不需要复杂的传输协议,还要设置防火墙,SOAP用的是HTTP。而且我们用的是XML作为传输数据格式而不是二进制。

程序员: 听起来很不错哦,告诉我它是怎么工作的?

SOAP专家: 没问题。首先,有一个SOAP信封,其相当的简单。就是一个XML文件由head和body组成。在body中进行你的RPC调用。

程序员: 哦,这就是所有的RPC的东西?

SOAP专家: 确对是的。就像我所说的,你的RPC调用的方法名和其参数都需要写的这个XML文档的body中。方法名是在最外层的tag,每一个嵌套的子tag就是其参数。并且所有参数的类型都可以被指定,请看能规格说明书的第五节。

程序员: (阅读第五节) 还好,不算太坏。

SOAP专家: 现在,当你的服务开发完后,你需要指定endpoint.

程序员: Endpoint?

SOAP专家: Endpoint, 就是服务的地址。你需要使用HTTP的 POST 方法把SOAP 信封放到 endpoint的 URL.

程序员: 如果我使用HTTP的GET方法什么怎么样?

SOAP专家: 不知道,使用GET的行为 undefined.

程序员: 哼哼。那么,要是我把我的服务移到别的 endpoint上?我是否可以得到一个301错误?

SOAP专家: 不会的,SOAP不会返回HTTP的错误码。

程序员: 那么,当你说SOAP使用HTTP,你的意思是说SOAP在HTTP打了个洞?

SOAP专家: 哦,别说得那么难听,应该说, SOAP 是一个传输协议。

程序员: HTTP 就不是吗?那是应用层的协议啊。总之,SOAP支持了别的什么传输协议?

SOAP专家: 官方地来说没有。但是你可以潜在地支持任何的协议。而且有许多的平台支持JMS,FTP还有SMTP。

程序员: 有人用那那些协议吗?

SOAP专家: 嗯,没有。不过,我想表达的是,你能够。

程序员: 好吧。关于 SOAPAction HTTP header,这是用来做什么的?

SOAP专家: 老实说,没人真正的知道。

程序员: 那么,那些 ‘actor’ 和 ‘mustUnderstand’ 属性,是否有人用呢?

SOAP专家: 没有,真的没人用。你就忽略这些东西吧。

程序员: 好吧,让我现读一读SOAP的规格说明书。

(程序员阅读中……)

程序员: 好了,我现在几乎可以做个简单的东西了,但是我不能说我喜欢这个远程过程调用RPC的方法以及其序列化对象的方式 。

SOAP专家: RPC!对象序列化!你从哪得到的SOAP就是一堆RPC的这种印象?! SOAP是关于基于文档的消息传递啊,我的朋友。

程序员: 但是,这是你说的……

SOAP专家: 忘了我所说的吧。现在,让我们谈谈消息传递吧。其消息格式遵守XML Schema,我们把之称为新型的文件格式。

程序员: XML Schema?

SOAP专家: 哦,这是很不错的东西,未来的头等技术,你应该看一下。

程序员: (阅读 Schema 规格说明书). 上帝保佑我们!就算是亚历山大帝也搞不定它啊。

SOAP专家: 不必太担心。会有专门的工作为你来创建XML Schema。真的,这只不过就是工具上的事。

程序员: 工具是怎么做的?

SOAP专家: 好吧,他们反映了你的代码,并自动生成Schema。

程序员: 反映了我的代码?我以为这只是文档,而不是对象序列化。

SOAP专家: 你没听我说吗?这只不是工具上的事。总之,我们不能期望你来手写 XML Schema 和 WSDL。另外,这其实就是一种校正测量。你不需要读的。

程序员:  喔喔,等一下,你刚才说的那个单词是什么? Wizzdle?

SOAP专家: 哦,我没有说过吗?WSDL. Web Services Description Language. 它让你指定你的数据类型,参数,操作名,传输绑定,以及endpoint URI,这样,所有的客户程序员就可以访问你的服务了。你应该看看。

程序员: (阅读WSDL 规格说明书)。我相信那个写下这个文章的人已经被枪杀了。其内部说明都不一致。而且,其用的是HTTP GET绑定,你不是和我说过, GET 是 undefined吗.

SOAP专家: 不必担心那个,没人会用那玩意。总之,工具会帮你生成WSDL,而且在WDSL里会有Schema的。

程序员: 但是,不应该用别的方法吗?不应该是先设计好接口然后再是生成代码吗?

SOAP专家: 是的,我猜那在原则上听起来是对的。但做起来并不容易,只有很少的SOAP栈支持先开发WSDL。让工具为这个事操心去吧。

程序员: 还有一个问题。如果我们传递 XML Schema 的消息,我们在哪里指写操作名?

SOAP专家: 好吧,你还记得 SOAPAction HTTP header吗? 绝大多数的人把操作名放在那里。

程序员: 大多数人?

SOAP专家: 嗯,这种新型并不会被写在所有的地方。

程序员: 我注意到你们整个SOAP界有很多的模糊和歧意,有些地方还是错的,并没有标准的规格说明书。实际上, SOAP 和 WSDL 规格说明书只是 W3C 的笔记罢了,连草稿都不是。

SOAP专家: 我们还在继续中。

程序员: 这个真的能行吗?能承诺吗?

SOAP专家: 绝对没有问题。

程序员: 好吧,那我去试试。

(不久以后……)

程序员: 事情变得很恶心。我这边的工具生成的WDSL居然不能被我同事的工具使用。还不仅仅是这个,其生成的XML Schemas 无法重用。而且,好像没有工具可以最好的处理SOAPAction header.

SOAP专家:  很报歉,兄弟。在光明的那一面,没人用这些文件。为了让传输独立,我们所有人都用包装好的文件。听着是不是很酷:包装好的文件?

程序员: 那是什么?

SOAP专家: 就像是原来那样,只不过,你整个消息被 包装起来成一个元素,其和操作有一样的名字。现在操作名和消息成了一体了。

程序员: 好吧,请问说明书在哪里?

SOAP专家: 哦,没有规格说明书。这只是Microsoft自己搞的。不过应该是个很不错的主意,挺不错的。然后,这是一个新玩意。我想你一定会喜欢它的—— Web Services Interoperability Group,简称 WS-I,它就是为了移除 SOAP 和 WSDL 规格说明书中的那些歧义。我知道你有多么喜欢规格说明书。

程序员: 所以,换句话说,原来的那些规格说明书太糟糕了,以致于你需要一个标准化的东西来标准化这些标准。上帝啊。好吧,那么,是否这些协调问题被 解决了?

SOAP专家: 当然,只要你使用 WS-I 的 SOAP 栈,就可以减少使用80%的 XML Schema,别用任何不同寻常的数据类型,也别期望可以和WebSphere和 Apache Axis一起运行。

程序员: 那么,是否包装的文件被在那里被解释了?

SOAP专家: 没有,但是你的工具会明白的。绝大多数,总之。

程序员: 让我总结一下,SOAP的定义是不变的,SOAP可以是任何东西,但就是简单,它不再意味着对象访问,就算是所有的工具都那样做。

SOAP专家: 基本上是对的,但是我们走得比你要远一些。我们不赞成SOAP缩写的含义。

程序员: 真的!那么SOAP是什么的缩写?

SOAP专家: 什么也不是,就是SOAP.

程序员: (无语中……)

SOAP专家: 下面让我来告诉你什么是 UDDI。

(注:我以前还认真地学过SOAP,不过真是学不懂。)

原文:来源

相关文章

相关 [soap simple] 推荐:

SOAP的S是Simple

- Jo - 酷壳 - CoolShell.cn
曾经有一个争论,一边是站在SOAP这边的人,另一边则是其它人. 站在SOAP这边人,当他们在争论SOAP和Web Service框架的复杂度时,SOAP这边的人说,在引入那些WS-*东东之前,SOAP的确是简单的,这就是为什么SOAP的第一个字母S就是Simple. 在2000年的时候,有一个苦恼的程序员,.

SOAP Webservice和RESTful Webservice

- - 人月神话的BLOG
REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. REST提出设计概念和准则为:. 1.网络上的所有事物都可以被抽象为资源(resource). 2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识.

REST 与 SOAP巅峰对话

- - CSDN博客互联网推荐文章
随着Restful的流行,soap似乎有点贵族落寞了. 下面我们先详细分析一下他们的各自的特点. REST(Representational State Transfer)是 Roy Fielding 提出的一个描述互联系统架构风格的名词. Web 本质上由各种各样的资源组成,资源由 URI 唯一标识.

Simple LightDM Manager : 登录背景修改器

- Jerry - Wow! Ubuntu
通告:问答社区重新上线,已经与 WordPress 整合,如果你之前在本 Blog 上注册过的话,就可用该帐号直接登录. 从 Ubuntu 11.10 开始,Ubuntu 采用 LightDM 作为登录管理器. 现在有开发者制作了一款名为 Simple LightDM Manager  的 tweaking 工具,用户可以通过 GUI 界面来简单快速的改变 LightDM 登录窗口的背景图片及 Logo.

nodejs web开发入门: Simple-TODO Nodejs 实现版

- Aleafs - CNode社区
看到simple todo的各种python版本实现, 我也来凑凑热闹…. 既然已经有这么多python版本了, 我就对比实现了一个Simple-TODO的nodejs版本: Node TODO, 模版和樣式全部copy自web.py版本.. 源代码: https://github.com/fengmk2/todo.

Simple Grid:轻量级的响应式 CSS 网格系统

- - 我爱水煮鱼
使用网格进行网页设计已经是潮流,但是现在有很多 CSS 框架都提供网格功能,用来控制网页上每个元素的位置,但是这些 CSS 框架都是太多功能,而有时我们仅仅需要一个简单的网格系统. Simple Grid 就是一个这样的简洁的 CSS 框架,并且它还是基于响应式布局设计. 基于响应式设计的 Simple Grid,让你可以快速创建适应于手机和平板电脑的网站.

simple – 基于 Github 的极简博客系统

- - 极客范 - GeekFan.net
simple是简单的静态博客生成器,基于 Github Pages,静态页面,完全在线操作,不需要服务器,只需一个 Github 账号即可. 传统的独立博客玩法,需要域名、服务器、程序等等一系列服务才玩得转,当然功能也丰富的多. simple 需要 GitHub 账号,然后创建一个 username.github.io 的 project,注意要勾选生成 README.

使用elasticsearch+simple_flow搭建实时日志搜索系统

- - ITeye博客
    在实际的系统中,我们经常会进行分布式的系统部署,但是这样会导致一个问题,系统日志也被分散开了,导致根据日志进行错误定位不太方便,所以,利用simple_flow实时流的特点,再配合elasticsearch建立索引,搭配构建一个实时日志搜索系统.具体流程图如下:. 1.启动elasticsearch, 这个参考官方文档  http://www.elasticsearch.org/.

【史上最无聊】虚拟肥皂:Digital Soap

- Mr.aa - 爱Apps - www.iapps.im
精选限时免费应用,由 AppPusher 为您送达. 无限精彩,尽在 爱Apps - www.iapps.im. 本站原创内容,转载时请务必注明出处,谢谢. 大小: 0.8 MB 系统: 4.2+. 万能的iphone总是有那么多稀奇古怪的应用软件,但在这款app面前,神马挑西瓜当尺子都是浮云了.

REST和SOAP:谁更好,或者都好?(转载)

- - 人月神话的BLOG
原文:http://www.infoq.com/cn/articles/Developer-Tester-Divide. 如今,Web开发者的可选技术相当之多;从简化的数据库访问技术,到易用的中间件服务包装技术,以及各种有趣的客户端软件等等,一应俱全. 所有这些产品和工具,都是为了帮助Web开发者用最快的速度开发出最好的Web应用.