soap 1.2 1.2
自SOAP 1.0发布以来,许多人抱怨它依赖于HTTP POST方法。 许多人认为SOAP使用了流行的协议(HTTP),但对其构建的体系结构却缺乏尊重和理解。
在W3C的主持下开发的1.2版本解决了此问题。 W3C已投入大量精力来抽象该协议的许多方面,以便可以更轻松地在多种技术中进行部署。 重写使SOAP 1.2除了HTTP之外还支持SMTP,并更好地使用HTTP。
POST讨论
POST有什么问题? 简而言之,HTTP定义了与服务器交互的不同方法,主要方法是GET和POST。 实际上,GET适用于大多数请求,而POST则保留用于更新站点的表单。 根据HTTP规范,GET用于信息检索,并且应该安全且幂等 。
在这种情况下, 安全是指该操作旨在检索而不是修改信息。 换句话说,GET请求通常应该没有副作用。 幂等意味着对同一URL的多个请求将返回相同的结果。 完整的定义没有看起来那么严格。 本质上,目标是当用户点击链接时,她可以确信自己没有从立场上修改资源。
例如,新闻站点的首页不断更新。 尽管第二个请求将返回另一批新闻,但是由于该操作始终返回当前新闻 ,因此该操作仍被视为安全且幂等的。 同样,计数器也可以。
POST请求不应太轻率。 POST标识可能会修改服务器上资源的请求。 要继续新闻站点的示例,应该通过POST请求来实现读者对文章的评论,因为发布评论后的站点会有所不同(例如,如果文章下方出现新评论)。
GET和POST之间的区别并不总是那么严格,有些区域是灰色的。 许多站点将简单的信息检索封装在POST请求中,这可能是因为开发人员认为这会使他的生活更简单。
尽管关于HTTP方法的讨论听起来可能是抽象的和理论上的,但事实并非如此。 浏览器和中介软件(代理,防火墙和内容交付解决方案点菜的Akamai)取决于获得优化的性能要求(见区分的能力相关主题 )。
SOAP符合GET
SOAP最初仅支持POST请求。 但是,Web服务可以实现如上所述安全的服务。 例如,查询订单进度的服务既安全又幂等。 根据HTTP规范,应将其实现为GET请求。 根据SOAP 1.0,它必须是POST。
SOAP 1.2引入了消息交换模式(MEP)和新的HTTP绑定。 通过将两者结合起来,您最终可以实现可响应GET请求的Web服务。 MEP记录了客户端和服务器之间的交互模式。 SOAP请求-响应MEP是一种典型的Web服务交互:客户端向服务器发送请求,服务器进行响应。
在这里,我将更仔细地研究SOAP响应MEP。 该MEP仅定义响应,没有请求。 实际上,这意味着已经发送了一个请求,但它不是SOAP请求-只有响应是SOAP。 与新的HTTP绑定结合使用时,响应MEP会启用GET请求。 运作方式如下:
- 客户端发出GET请求。 它将
Accept
标头设置为application/soap+xml
以请求SOAP答案。 - 服务器回复,客户端将响应作为常规SOAP响应进行处理。
服务器通过Accept
标头将SOAP请求与常规HTML请求区分开。 客户端可以使用q
属性指示其首选项,在“ Accept
设置不同的内容/类型。
取决于服务的需求,客户端可以通过常用的URL编码方法(通常在?
字符之后)在URL中包括参数。 例如,报告服务器场状态的服务可能不需要任何参数。 根据定义,它返回当前服务器的状态。 相反,报告产品可用性和价格的服务将以产品标识符(或名称)为参数。
到目前为止,您可能想知道客户端如何知道要调用的URL和要传递的参数,因为请求不是SOAP的一部分。 答案很简单:SOAP服务器应该执行常规Web服务器的工作,并在先前的SOAP交互中包括URL。 没有什么可以阻止GET和POST的混合和匹配。
例如,假设有一个处理办公物品(笔,纸,剪刀等)的服务。 该服务通过SOAP接受订单; 显然,这样的订单请求既不安全也不幂等,因此它是作为POST发送的。 来自服务器的响应可能包括用于跟踪订单进度的URL。 跟踪是安全和幂等的,因此最好通过GET进行跟踪。
Axis和WSDL支持
在撰写本文时,Axis仅支持SOAP 1.1,但仍实现了GET的有限形式。 您可以通过其URL调用任何请求,后跟一个method
参数和其他参数。
例如,假设我已经在URL http://joker.psol.com/axis/order/Status.jws
实现了订单状态服务。 该服务有两种方法, track
和detailTrack
,它们以订单号( onumber
)作为参数。 我可以通过http://joker.psol.com/axis/order/Status.jws?method=track&onumber=56544322
调用该服务。
WSDL 2.0(当前正在W3C进行开发)在操作定义中添加了pattern
属性。 此属性指示服务支持哪些SOAP MEP(WSDL调用MEP模式,因此SOAP和WSDL之间没有混淆)。 例如,跟踪服务可能如清单1所示。
清单1. WSDL摘录
<operation name="track" pattern="http://www.w3.org/2003/11/wsdl/out-only">
<output message="trackResponse"/>
</operation>
结论
Web背后的简单原理已经证明了它们的可伸缩性和可靠性。 作为Web服务基础的主要标准之一的SOAP,已经采取了一些措施,使其与这种极为成功的体系结构更加紧密地结合在一起,这是一个非常积极的发展。
在等待将您喜欢的工具包升级到SOAP 1.2和WSDL 2.0时,请检查Web服务并确定安全的操作,这些操作是迁移到GET绑定的主要候选对象。
翻译自: https://www.ibm.com/developerworks/xml/library/x-tipgetr/index.html
soap 1.2 1.2