简单对象访问协议(SOAP,原为Simple Object Access Protocol的首字母缩写)[1]是交换数据的一种协议规范,使用在计算机网络Web服务(web service)中,交换带结构的信息。SOAP为了简化网页服务器(Web Server)从XML数据库[2]中提取资料时,节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议,遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM、莲花(Lotus)、康柏(Compaq)等公司的支持,于2000年提交给万维网联盟(World Wide Web Consortium,W3C),目前SOAP 1.1版是业界共同的标准,属于第二代的XML协定(第一代具主要代表性的技术为XML-RPC以及WDDX)。
历史沿革
SOAP最初代表“Simple Object Access Protocol”,但在标准1.2版发布后,这一缩写不再使用,以避免与面向服务架构(Service-Oriented Architecture,SOA)产生混淆。SOAP由Dave Winer、Don Box、Bob Atkinson、Mohsen Al-Ghosein等人于1998年设计,起初仅作为一种对象访问协议。后来,SOAP规范由万维网联盟的XML工作组负责维护。最新版本SOAP 1.2版在2003年6月24日成为W3C的推荐版本。
工作原理
SOAP通过因特网应用层协议作为其传输协议,通常使用HTTP协议[3]进行传输,但也支持其他协议如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处理指令。
请求
```xml
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<req:echo xmlns:req="http://localhost:8080/wxyc/login.do">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
```
回应
```xml
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<soapenv:Header>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:From>
<wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address>
</wsa:From>
<wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>
</soapenv:Header>
<soapenv:Body>
<req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
```
特点
参考资料 3
- 简单对象访问协议 — SOAP — 广州新悦网络设备有限公司
- xml数据库是什么意思 — Worktile
- 什么是HTTP协议 — MBA智库