SOAP是有状态协议吗? REST真的是无状态的吗?如何使用REST存储数据?

时间:2018-07-31 10:46:04

标签: rest soap protocols stateless stateful

SOAP是否设计为有状态的?如何达到? SOAP使用RPC,那么在哪里存储数据?

REST是否设计为无状态?是否可以将数据存储在JSON中?真的错了吗?

谢谢

2 个答案:

答案 0 :(得分:1)

  

REST是否设计为无状态?

是的,的确如此-但是Fielding对于stateless在REST上下文中的含义是精确的:

  

通信本质上必须是无状态的,如第3.4.3节(图5-3)中的客户端无状态服务器(CSS)样式那样,以便从客户端到服务器的每个请求必须包含所有必要的信息,了解请求,并且无法利用服务器上的任何存储上下文。因此,会话状态完全保留在客户端上。

换句话说,要正确解释请求,服务器不需要记住任何先前的请求。

例如,将HTTP(凭证是请求的元数据的一部分)与FTP(凭证与RETR命令分开发送)进行对比。

答案 1 :(得分:0)

将SOAP与REST进行比较不太合适,因为SOAP是基于XML的协议,而REST是根据定义并未引入特定技术的体系结构样式。

在任何情况下,REST的常见用法都是通过HTTP(如SOAP)进行,而REST与json和http的常见用法仅是一种舒适的实现,由于其令人难以置信的良好性能非常适合于Web开发和机器对机器的通信。几乎所有现代编程语言都支持json。

说SOAP绝对是无状态的!。 当我们用soap触发Web服务调用时,我们在xml中创建一个SOAP信封并将其发送到http通道,默认情况下是无状态的。

在接近SOAP的几年中,可以与SOAP一起使用的许多其他协议可以为该协议增加一些功能,即众所周知的WS- *。 BPEL值得讨论,它是SOAP编排的最重要标准。 即使以我的经验来看,BPEL引擎提供了SOAP Web服务以创建“状态已满” Web服务,但是BPEL流程是通过SOAP公开的,它与SOAP不相关。 BPEL是BPEL,而SOAP是SOAP是两个分离的东西。

说是的,REST是一种设计上无状态的体系结构样式,它特别适合与http一起使用,但即使soap也是像http://transport.layer一样使用http的无状态协议。

对于问题的存储数据部分,存储数据与应用程序有关。当然,您可以像SOAP Web服务一样在REST API中传递数据。对于SOAP Web服务,通​​常将数据发布到SOAP信封的主体上。在REST服务中,通常您是在创建/更新资源,因此,使用REST的经典http实现,您将执行POST(创建)/ PUT(更新所有资源)/ PATCH(仅更新一部分资源)将数据粘贴到http请求的正文中。当然,不要忘记application / json上的Content-Type http标头。

我希望它能为您提供帮助