概念——SOAP(简单对象访问协议)
本文内容
- SOAP 概述
- SOAP 传输方式
- SOAP 语法规则
- SOAP 消息实例
SOAP 概述
SOAP(Simple Object Access Protocol,简单对象访问协议)是一种标准化的通讯规范,主要用于 Web 服务(Web Service)。SOAP 是为了简化网页服务(Web Server)。从 XML 提取数据时,无需花时间去格式化页面。让不同的应用程序之间通过 HTTP 协议,以 XML 格式交换数据,这样,与编程语言、平台和硬件无关。
SOAP 由 IBM、Microsoft、UserLand 和 DevelopMentor 在 1998 年共同提出,并得到 IBM、Lotus、Compaq 等公司的支持,于 2000 年提交 W3C。目前 SOAP 1.1 版是业界标准,是第二代 XML 协定。第一代的主要代表为 XML-RPC 和 WDDX。
SOAP 的一个简单例子:假设,有一个房价的数据库,SOAP 消息参数中指定房价查询信息,Web 服务点根据该查询信息,返回一个 XML 格式信息,其中包含查询结果(如价格、位置、特点,或者其他信息)。由于 XML 数据是一种结构化文本标准,可以被第三方使用。
SOAP 传输方式
SOAP 使用因特网的应用层协议作为其传输协议。HTTP 或 SMTP 协议都可以用来传输 SOAP 消息,但由于 HTTP 在现在的因特网中工作得很好,特别是在网络防火墙下仍然正常工作,所以被广泛采纳。
SOAP 也可以在 HTTPS 上传输。
SOAP 语法规则
- SOAP 消息必须使用 XML 编码
- SOAP 消息必须使用 SOAP Envelope 命名空间
- SOAP 消息必须使用 SOAP Encoding 命名空间
- SOAP 消息不能包含 DTD 引用
- SOAP 消息不能包含 XML 处理指令
SOAP 消息实例
请求
<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/axis2/services/MyService/">
<req:category>classifieds</req:category>
</req:echo>
</soapenv:Body>
</soapenv:Envelope>
回应
<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>