SOAP 语法
SOAP语法
SOAP stands for Simple Object Access Protocol. It is a messaging protocol used in web services to exchange structured information between network nodes. SOAP has a syntax defined in an XML schema that allows developers to easily build messages using a number of well-established XML constructs.
SOAP消息结构
SOAP消息请求和响应遵循下面的结构。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
...
</SOAP-ENV:Header>
<SOAP-ENV:Body>
...
</SOAP-ENV:Body>
<SOAP-ENV:Fault>
...
</SOAP-ENV:Fault>
</SOAP-ENV:Envelope>
消息头使用SOAP-ENV:Header标记,用于传递附加信息。消息体使用SOAP-ENV:Body标记,contains the actual SOAP message. 消息体是需要传递的应用数据的主要部分。
SOAP-ENV:Fault标记只出现在响应消息中,用于传递处理错误的相关信息。
SOAP消息头
SOAP消息头允许传递一些元数据或其他有关消息本身的信息。SOAP规范没有指定必须包括哪些信息,但以下是一些最常使用的 SOAP头部元素:
- Addressing
- Authentication
- Message ID
- Timestamp
- Session information
SOAP消息体
SOAP消息体包含了要传输的载荷数据。这些数据可以是任何有效的XML文档(尽管不能包含XML声明)。消息体中的内容根据SOAP规范的类型系统进行解码和编码。SOAP类型系统是对XML Schema的扩展,允许定义更多种类型。
SOAP消息错误
当SOAP请求或响应包含某种问题时,应用程序会返回一个SOAP-ENV:Fault节点。Fault节点包含有关问题的信息:Fault Code、Fault String、Fault Actor和detail。
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Failed to perform action X</faultstring>
<faultactor>http://example.com/service</faultactor>
<detail>
<ErrorDetails>...</ErrorDetails>
</detail>
</SOAP-ENV:Fault>
- faultcode:用于指定服务器端的错误类型。SOAP规范定义了三个预定义错误代码:Client、Server 和 Receiver。
- faultstring:用于向用户展示友好的错误信息。它应该描述了出现错误。
- faultactor:可以用来指定哪个端点抛出了故障。
- detail: contains additional details about the fault.
SOAP与Web Services
SOAP消息往往用于在分布式系统中执行消息传递。SOAP是一种可扩展方式,能够用于鉴定、识别和路由Web Service请求。SOAP既可以与RESTful Web服务一起使用,也可以和标准的传输协议(如HTTP、HTTPS、TCP和FTP)一起使用。
SOAP可以与各种编程语言和框架一起使用。包括Java、Python、C#、C++和Ruby等。
在使用SOAP之前,需要通过Web服务描述语言(WSDL)定义SOAP消息和传输机制。WSDL定义了Web Service的接口,包括数据格式、协议和绑定。大多数SOAP工具和交互式开发环境(如Apache Axis2,Eclipse SOAPUI和Visual Studio)支持WSDL。
SOAP的优势
- 跨语言:由于SOAP使用XML,因此可以使用各种编程语言在多个平台之间进行通信。
- 可扩展性:SOAP支持全面XML扩展来支持特定的实现和数据需求。
- 桌面友好:SOAP轻量级并且使用HTTP,可以通过防火墙传输。
- 设计良好:SOAP广泛使用且经过多年发展,因此可以在各种环境中稳定、可靠、安全和可伸缩地使用。