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

Is SOAP a stateful protocol? Is REST really stateless? How can one store data using REST?

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

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

谢谢

Is REST designed to be a stateless?

是的,它确实是——但菲尔丁对 stateless 在 REST 上下文中的含义是准确的:

communication must be stateless in nature, as in the client-stateless-server (CSS) style of Section 3.4.3 (Figure 5-3), such that each request from client to server must contain all of the information necessary to understand the request, and cannot take advantage of any stored context on the server. Session state is therefore kept entirely on the client.

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

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

比较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 服务以创建 "state full" Web 服务,BPEL 流程通过 SOAP 公开的事实与 SOAP 无关。 BPEL 是 BPEL 和 SOAP 是 SOAP 是两个分开的东西。

说是的,REST 是一种设计为无状态的架构风格,它特别适合与 http 一起使用,但即使是 soap 也是一种像传输层一样使用 http 的无状态协议。

对于问题的存储数据部分,存储数据是应用程序关注的问题。当然,您可以像 SOAP Web 服务一样在 rest api 中传递数据。对于 SOAP Web 服务,通常您将 post 数据放在 SOAP 信封的 body 上。在 REST 服务中,您通常是 creating/updating 资源,因此使用 REST 的经典 http 实现,您将执行 POST(create)/PUT(update all the resource)/ PATCH(仅更新一块资源)在 http 请求的 body 中传递数据。当然不要忘记 Content-Type http header on application/json.

希望对您有所帮助