03 三种主流Web服务架构 - SOAP
1. 什么是SOAP?
SOAP(Simple Object Access Protocol )简单对象访问协议是是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。更简单地说:SOAP 是用于访问网络服务的协议。SOAP=RPC+HTTP+XML
SOAP的两个主要设计目标是简单性和可扩展性。一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
1. 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息。
2.可选的 Header 元素,包含头部信息。
3.必需的 Body 元素,包含所有的调用和响应信息。
4.可选的 Fault 元素,提供有关在处理此消息所发生错误的信息。
SOAP具体技术实现:
WebService, WCF
2. 为什么需要SOAP?
大型企业中信息系统大多数为多平台、多系统的复杂系统。这就要求今天的企业解决方案具有广泛的兼容能力,可以支持不同的系统平台、数据格式和多种连接方式。
对于部署各种平台上的各式各样的程序开发来说,能在程序之间进行因特网通信是很重要的。
以前应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。
而通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。
SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。
3. SOAP 消息的基本结构
<?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>
4. Soap的请求例子
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?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:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
5. Soap的响应例子
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?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:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>