简单对象访问协议(SOAP,原为Simple Object Access Protocol的首字母缩写)是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构的信息。SOAP为了简化网页服务器(Web Server)从XML数据库中提取资料时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从
XML执行资料互换,使其抽象于语言实现、平台和硬件。此标准由IBM、
微软、UserLand和DevelopMentor在1998年共同提出,并得到IBM、莲花(Lotus)、
康柏电脑(Compaq)等公司的支持,于2000年提交给
万维网联盟(World Wide Web Consortium,W3C),目前SOAP 1.1版是业界共同的标准,属于第二代的XML协定(第一代具主要代表性的技术为
XMLRPC以及WDDX)。
历史沿革
SOAP最初代表“Simple Object Access Protocol”,但在标准1.2版发布后,这一缩写不再使用,以避免与面向服务架构(Service-Oriented
建筑,SOA)产生混淆。SOAP由Dave Winer、Don Box、Bob Atkinson、Mohsen Al-Ghosein等人于1998年设计,起初仅作为一种对象访问协议。后来,SOAP规范由
万维网联盟的
XML工作组负责维护。最新版本SOAP 1.2版在2003年6月24日成为W3C的推荐版本。
工作原理
SOAP通过因特网应用层协议作为其传输协议,通常使用HTTP协议进行传输,但也支持其他协议如SMTP。SOAP的消息格式采用XML编码,确保了跨平台和跨语言的兼容性。SOAP的核心技术包括HTTP和XML,前者用于实现SOAP的RPC风格传输,后者作为其编码模式。SOAP能够很好地适应中间介质和层次化的体系结构,同时也保持了简单易用的特点。
SOAP消息结构
SOAP消息由若干构建模块组成,包括必需的Envelope元素、可选的Header元素、必需的Body元素以及可选的Fault元素。这些元素构成了一个完整的SOAP消息,其中Body元素包含所有调用和响应信息,而Fault元素提供有关处理消息过程中发生的错误信息。SOAP消息必须遵守特定的语法规则,包括使用
XML编码、指定SOAP Envelope和Encoding命名空间、禁止包含DTD引用和XML处理指令。
SOAP消息示例
请求
```xml
\u003csoapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XML
Schemainstance"\u003e
\u003csoapenv:Body\u003e
\u003creq:echo xmlns:req="http://localhost:8080/wxyc/login.do"\u003e
\u003creq:category\u003eclassifieds\u003c/req:category\u003e
\u003c/req:echo\u003e
\u003c/soapenv:Body\u003e
\u003c/soapenv:Envelope\u003e
```
回应
\u003csoapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"\u003e
\u003csoapenv:Header\u003e
\u003cwsa:ReplyTo\u003e
\u003cwsa:Address\u003ehttp://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous\u003c/wsa:Address\u003e
\u003c/wsa:ReplyTo\u003e
\u003cwsa:From\u003e
\u003cwsa:Address\u003ehttp://localhost:8080/axis2/services/MyService\u003c/wsa:Address\u003e
\u003c/wsa:From\u003e
\u003cwsa:MessageID\u003eECE5B3F187F29D28BC11433905662036\u003c/wsa:MessageID\u003e
\u003c/soapenv:Header\u003e
\u003csoapenv:Body\u003e
\u003creq:echo xmlns:req="http://localhost:8080/axis2/services/MyService/"\u003e
\u003creq:category\u003eclassifieds\u003c/req:category\u003e
\u003c/req:echo\u003e
\u003c/soapenv:Body\u003e
\u003c/soapenv:Envelope\u003e
```
特点
- 可扩展性:SOAP允许客户、服务器和协议本身不断发展,而不影响现有应用程序。
- 简单性:SOAP实现了客户端发送请求、服务器返回结果的简单交互模式,消息以
XML封装,符合HTTP协议要求。
- 中立性:SOAP不受制于特定的平台、操作系统、目标模型或
编程语言,传输和语言绑定的选择由具体实现决定。
- 与编程语言无关:SOAP可以通过任何语言实现,只需确保客户端发送正确的SOAP请求即可。
- 与平台无关:SOAP能够在任何操作系统环境中无缝运行。