web service 之 SOAP(一)
一、SOAP(Simple Object Access Protocol) 简单对象访问协议.
看上篇的web service 技术架构图,SOAP对应于消息层,且在XML之上。
1、所谓协议就是个约定,就是大伙定个规矩以什么样的形式交流。
和"天黄盖地虎,宝塔镇河妖"一个道理。
2、SOAP 对应于消息层
web service 以SOAP作为消息传递协议。
"SOAP是web service 消息传输协议事实上的标准"--《web 服务与技术》
3、SOAP是基于XML的。
先可以简单的理解为用http传送符合某种特定规则的xml就是SOAP。
为什么是SOAP ?
SOAP是基于xml的。xml是中立的不是那种语言特有的东西,也不是只属于特定的
平台。SOAP实现了跨平台的互操作性。
向对于别的组件技术CORBA、DCOM、RMI , SOAP绝对优点就是不必要求通信连接的
两端使用同一分布式模型实现。
一句话SOAP是松耦合的,是平台无关的。
二、说那么多了,SOAP到底长啥样子?
掀起她的盖头来:
先看百度百科 SOAP :
http://baike.baidu.com/view/1695890.htm?from_id=4684413&type=syn&fromtitle=SOAP&fr=aladdin
协议结构
SOAP消息格式:
<SOAP-ENV:Envelope 各种属性>
<!--百度百科示例-->
<SOAP:HEADER>
</SOAP:HEADER>
<SOAP:Body>
</SOAP:Body>
</SOAP-ENV:Envelope>
消息基本结构
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
<!--百度百科示例-->
</soap:Header>
<soap:Body>
<!--百度百科示例-->
<soap:Fault>
<!--百度百科示例-->
</soap:Fault>
</soap:Body>
</soap:Envelope>
没有什么神秘嘛,一条SOAP消息就是个xml,这个xml根节点是soap:Envelope
有必须的节点soap:Body,可选的节点有soap:Header、soap:Fault。
采用SOAP 协议交换数据,实际就是相互传送上面格式的xml。
到这里再想想,所谓的跨平台的互操作性就明白了吧。
三、SOAP、XML、HTTP 关系:
还是先看下web service技术架构图,HTTP 对应于右侧的"传输",而xml 、SOAP在http之上。
web service 的消息是通过HTTP来传送的(不必须是http),并且传送的消息格式是xml的,
是xml的但不能是任意xml格式,这个xml格式必须符合SOAP规范,符合SOAP规范的才能被
进行web service通讯的两端正确解析理解。
形象的说http就是运送货物的卡车,SOAP就是货物,这种货物是用xml组装的。
这样说可能不太准确,参考 W3C关于SOAP的一句话:"HTTP + XML = SOAP".
这样说或许更精确些。