肥皂网服务请求与HTTP POST请求?

时间:2015-03-25 09:01:27

标签: java web-services soap httprequest

我来自servlet / web应用程序世界,并开始学习Web服务(基于SOAP)。我已经浏览了一些web服务 教程。我试图绘制正常的http请求和webservice请求之间的并行。以下是我的观察结果; -

1)两者都是HTTP请求。 Webservice也是一个post请求,其中包含soap信封作为请求主体。肥皂信封 只是一个包含数据的普通xml

2)java Stub内部编组XML,创建HTTP请求并将其发送给消费者

3)用户端的Servlet请求和解析它到java对象并将其发送到相应的服务。

我的观察是否正确?我知道可能还有其他复杂因素,但我试图以简单的方式进行比较。

3 个答案:

答案 0 :(得分:3)

您的假设通常是正确的。然而,这些亚细胞可能会导致巨大的差异。

  

声明1:两者都是HTTP。

SOAP通常与HTTP"绑定"一起使用。但它不一定是这样。 SOAP旨在与传输无关。将SOAP用于JMS并不罕见(尽管人们可能认为这是对JMS的过度使用以及过度使用的协议),但它在许多地方肯定都在生产中。很少见到没有HTTP的SOAP / SMTP或SOAP / TCP,但这些也存在。

  

Webservice也是一个帖子请求,其中包含肥皂信封作为请求正文

HTTP上的SOAP调用是POST请求。但是,它可能不是内容类型的xml,因为某些变体(如SwA(带附件的SOAP)或XOP + MTOM变体)可能会生成MIME / Multipart的HTTP有效内容(其中第一部分是纯粹的SOAP Enveloppe) XML格式)。
这种使用cas是最常见的,当通过SOAP调用发送大型二进制内容时,二进制编码可能会对请求增加很大的权重(base64的权重为1.3倍)。

  

java Stub内部封送XML,创建HTTP请求并将其发送给消费者

这是通常的方式,Axis框架和JAXWS框架主要以这种方式工作。

旧的SAAJ API是一个标准的EE API,要求您使用DOM API手动构建SOAP消息(请参阅SOAPMessageFactory),然后发送它。

如果你看一下Spring WS,你会得到一些与你的声明很接近的东西,但是每个部分都暴露在你的控制之下(你可以选择使用DOM Api构建某些调用,其他人使用JAXB编组,......)。

  

3)消费者端的Servlet请求和解组它到java对象并将其发送到相应的服务

同样,这就是事情通常的运作方式。但是您也可以拥有一个在servlet容器外部工作的实现。 (请参阅JAX WS中的端点服务API)。

答案 1 :(得分:2)

您的假设是正确的: -

是的,Servlet请求和Web服务请求都是正常的HTTP请求,是的,SOAP Web服务在内部使用HTTP POST。

是的,java内部编组XML。此外,在客户端,一个java Web服务客户端(可能是一个包装在servlet中)解组它。 SOAP message或SOAP类型的Web服务具有许多特征,例如: -

  • SOAP消息主要使用XML格式发送数据。 XML与技术无关。因此,SOAP可以与两个使用XML构建的异构Web应用程序交互,并使用XML交换数据。
  • SOAP Web服务使用HTTP协议发送XML。使用HTTP的有效负载以XML格式发送数据。
  • 可以保护SOAP Web服务。例如,使用信用卡和银行信息的所有支付相关交易都是使用安全的SOAP Web服务完成的。
  • SOAP Web服务在请求中接受XML并返回XML作为响应。如果出现错误,则返回XML也可能包含SOAP错误。 SOAP错误包含错误描述和错误代码。
  • Web服务可以携带附件文档,如PDF,Word等及其XML有效负载。 Java为此类Web服务提供单独的API。在Java中有一个名为SAAJ的API可以实现此目的。

答案 2 :(得分:0)

我认为Ben Klopfer可以在blog post中找到一个非常好的回应。

主要是XML / SOAP与HTTP / REST之间的区别在于前者的响应速度最快,而后者则较轻。

但这不是你必须考虑的唯一方面。 REST表示资源的状态,并且更容易使用和理解,并且始终记住它与SOAP相比之后。 此外,SOAP不仅限于使用HTTP / HTTPS,还可以与SMTP,JMS等其他传输一起使用。

恢复帖子会提醒你:

  

在以下情况下使用SOAP:

     
      
  • 您只需要简单的操作,例如只读方法

  •   
  • 为数据交换或转移等事项实施单向或单对象服务

  •   
  • 您希望更好地控制特定的数据传输,或者不能始终使用HTTP

  •   
  • 需要对传入的请求强制执行刚性规范,并且您希望最大限度地减少使用所需的其他文档

  •   
  • 您可以依靠客户端解析XML的能力,或者更优选的是SOAP本身

  •   
  • 当请求出现问题时,您需要内置错误处理

  •   
     

在以下时间使用REST:

     
      
  • 操作很复杂,例如对象上的创建/读取/更新/删除

  •   
  • 为各种不同的对象实施多方面的服务

  •   
  • 您希望轻松快速地将各种消费者最终用户设备定位为客户

  •   
  • 与会话相比,请求通常是无状态的,如呼叫和响应

  •   
  • 您的客户可能拥有有限的带宽或处理能力

  •   
  • 您可以将其留给客户,以正确处理他们的请求并处理问题

  •