我来自servlet / web应用程序世界,并开始学习Web服务(基于SOAP)。我已经浏览了一些web服务 教程。我试图绘制正常的http请求和webservice请求之间的并行。以下是我的观察结果; -
1)两者都是HTTP请求。 Webservice也是一个post请求,其中包含soap信封作为请求主体。肥皂信封 只是一个包含数据的普通xml
2)java Stub内部编组XML,创建HTTP请求并将其发送给消费者
3)用户端的Servlet请求和解析它到java对象并将其发送到相应的服务。
我的观察是否正确?我知道可能还有其他复杂因素,但我试图以简单的方式进行比较。
答案 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服务具有许多特征,例如: -
答案 2 :(得分:0)
我认为Ben Klopfer可以在blog post中找到一个非常好的回应。
主要是XML / SOAP与HTTP / REST之间的区别在于前者的响应速度最快,而后者则较轻。
但这不是你必须考虑的唯一方面。 REST表示资源的状态,并且更容易使用和理解,并且始终记住它与SOAP相比之后。 此外,SOAP不仅限于使用HTTP / HTTPS,还可以与SMTP,JMS等其他传输一起使用。
恢复帖子会提醒你:
在以下情况下使用SOAP:
您只需要简单的操作,例如只读方法
为数据交换或转移等事项实施单向或单对象服务
您希望更好地控制特定的数据传输,或者不能始终使用HTTP
需要对传入的请求强制执行刚性规范,并且您希望最大限度地减少使用所需的其他文档
您可以依靠客户端解析XML的能力,或者更优选的是SOAP本身
当请求出现问题时,您需要内置错误处理
在以下时间使用REST:
操作很复杂,例如对象上的创建/读取/更新/删除
为各种不同的对象实施多方面的服务
您希望轻松快速地将各种消费者最终用户设备定位为客户
与会话相比,请求通常是无状态的,如呼叫和响应
您的客户可能拥有有限的带宽或处理能力
您可以将其留给客户,以正确处理他们的请求并处理问题