OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

REST 和 SOAP:谁更好,或者都好?

  • 2010-06-04
  • 本文字数:2200 字

    阅读完需:约 7 分钟

如今,Web 开发者的可选技术相当之多;从简化的数据库访问技术,到易用的中间件服务包装技术,以及各种有趣的客户端软件等等,一应俱全。所有这些产品和工具,都是为了帮助 Web 开发者用最快的速度开发出最好的 Web 应用。

然而,拥有大量可选软件方案以及为 Web 应用的特定部分选用特定方案,都是具有挑战的事;而且,现在 Web 开发者必须持续跟踪各种不断变化着的标准与方法。

举个例子,Web 服务技术就有 SOAP(Simple Object Access Protocol,简单对象访问协议)和 REST(Representational State Transfer,表示性状态转移)这两种方案。它们都是有效的方案,但在具体场合下采用哪种方案好,这要取决于 Web 开发者。

目前,大部分 Web 开发者似乎都了解 REST——一种采用标准 URI 进行调用的方案。REST 很容易理解,而且只要是支持 HTTP/HTTPS 的客户端 / 服务器就支持它。你可以用 HTTP GET 方法来执行命令。所以,开发者们感受到的 REST 的优势是:开发简单、只需依托现有 Web 基础设施、以及学习成本低。

然而,SOAP 作为一种古老的 Web 服务技术,短期内还不会退出历史舞台。而且,随着 SOAP 1.2 的出现,SOAP 印象中的一些缺点已得到改进,采纳率和易用程度也都得到提高。另需注意的是,从 W3C SOAP 1.2 版开始,SOAP 这一缩写不再代表 Simple Object Access Protocol(简单对象访问协议),而是仅仅作为协议名称而已。

相对 REST 而言,SOAP 1.2 多出一些开销,不过这些开销也带来了一些好处。首先,SOAP 在三个方面离不开 XML(Extensible Markup Language,可扩展标记语言):SOAP 信封(envelope)是基于 XML 的,它定义了消息里有什么以及如何处理它;一套用于数据类型的编码规则;过程调用和响应的规划。SOAP 信封由传输协议(HTTP/HTTPS)发出,RPC(Remote Procedure Call,远程过程调用)得到执行,然后一个 XML 文档随 SOAP 信封返回。

需要注意的是,基于“通用”传输协议是 SOAP 的一个优点。REST 目前基于 HTTP/HTTPS;而 SOAP 可支持任何传输协议,从 HTTP/HTTPS 到 SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至 JMS(Java Messaging Service,Java 消息传递服务)。不过,由于 XML 较为冗长且解析费时,因此采用 XML 也成为一个弊端。

不过,对 Web 开发者来说的好消息是,目前上述两种方案都是行之有效的方案。REST 和 SOAP 都能解决许多 Web 方面的问题与挑战,而且在许多情况下,它们各自都能满足开发者的要求,也就是说可互换使用。

但很多人不知道,这两种技术可以混合搭配使用。REST 很好理解,且极易上手;不过由于它缺乏标准,因此只被看作是一种架构方法。与之相比,SOAP 是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。

因此,REST 的适用场合包括:

  • 有限的带宽和资源 别忘了返回的结构可以采用(由开发者定义的)任何格式。另外,由于 REST 采用标准的 _GET_、PUT、_POST_ 和 _DELETE_ 动词,因此可被任何浏览器所支持。除此以外,REST 还可以使用为目前大多数浏览器支持的 _XMLHttpRequest_ 对象,这为 AJAX 增色不少。
  • 完全无状态的操作 对于那些需多步执行的操作,REST 并非最佳选择,采用 SOAP 更合适。但是,如果你需要无状态的 CRUD(Create/Read/Update/Delete,创建 / 读取 / 更新 / 删除)操作,那么应采用 REST。
  • 缓存考虑 若要利用无状态操作的特性,使得信息可被缓存,那么 REST 是很好的选择。

以上已经覆盖很多方案了,那么,为什么还要考虑 SOAP 呢?正如前述,SOAP 比较成熟而且是经过良好定义的,具有完整的规范。而 REST 只不过是一种方法,对开发未作任何规约;因此,假如你遇到以下场合,那么 SOAP 是最佳选择:

  • 异步处理与调用 如果你的应用需要确保可靠性与安全性,那么请采用 SOAP。SOAP 1.2 为确保这种操作补充定义了 WSRM(WS-Reliable Messaging)等标准。
  • 形式化契约 若提供者 / 消费者双方必须就交换格式取得一致,那么采用 SOAP 更合适。SOAP 1.2 为这种交互提供了严格的规范。
  • 有状态的操作 如果应用需要上下文信息与对话状态管理,那么应采用 SOAP。SOAP 1.2 为此补充定义了 WS-Security、WS-Transactions 和 WS-Coordination 等标准。相比之下,REST 方法要求开发者自己来实现这些框架性工作。

正如你所看到的,REST 和 SOAP 各自有其用武之地。它们在安全性和传输层等方面有着自己的潜在问题,不过它们都能完成任务,而且在许多情况下,它们都丰富了 Web 的技术手段。因此,就这一论题,其实最好的原则就是灵活性原则;因为至少在现今的 Web 开发中,无论面对何种问题,Web 开发者们总有办法运用好这两种技术中的一种。

关于作者

Mike Rozlog 是 Embarcadero 科技公司的高级产品主管。他的主要工作是确保 Embarcadero 公司推出开发工具满足全世界开发者们的期望。他的大部分时间被致力于从技术和业务两个方面来介绍讲解 Embarcadero 的产品与服务,其听众是遍布全球分析师及其他听众。Mike 曾工作于 CodeGear,一个于 2008 年被 Embarcadero 收购的开发工具团队。之前,他为 Borland 公司工作了八年,担任过包括首席技术架构师在内的许多职位。作为一名知名作者,Mike 出版了很多书。他最近的作品 _《Mastering JBuilder》_ 已由 John Wiley & Sons 出版。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010-06-04 01:3340311
用户头像

发布了 63 篇内容, 共 25.1 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用

华为云开发者联盟

运维 数据 集群

NET-Core中的配置文件操作

为体验更多

C# .net .net core ASP.NET Core

云计算简史(上)- 15分钟读完15年

明道云

第19届亚运会门票采用区块链技术防伪

CECBC

区块链技术 防伪 溯源

程序员的美丽假期(并不)

Philips

敏捷开发 快速开发

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(三)

陈泽云

人工智能 大数据 计算机网络 操作系统 网络

第12周作业

Vincent

极客时间 极客大学

甲方日常 33

句子

工作 随笔杂谈 日常

架构师的成长之路

华章IT

CTO 架构师 架构师之道

Java Reference核心原理分析

AI乔治

Java 架构 JVM 性能调优

考研须知

时间是一个人最好的证明

考研

让AI人才在产业界闪闪发光:百度之星的“神奇滤镜”是怎样炼成的?

脑极体

5G时代音视频开发王器:WebRTC

华章IT

flutter 音视频 WebRTC React Native

分布式系统设计理念这么难学?

架构师修行之路

分布式 微服务

诸多老牌数据仓库厂商当前,Snowflake如何创近12年最大IPO金额

华为云开发者联盟

数据仓库 数据 存储

架构训练营 - 第4周课后作业 - 学习总结

Pudding

“区块链×多方计算”解决众多难题 将成区块链应用新场景

CECBC

区块链 数据融合

“区块链技术创新要植根市场”

CECBC

金融科技 信息安全

十七、深入Python异常处理

刘润森

Python

京东智联云MySQL数据库如何保障数据的可靠性?

京东科技开发者

MySQL 数据库

第12周学习总结

Vincent

极客时间 极客大学

详细分析定制企业应用的价格

Learun

敏捷开发 快速开发 软件架构

CloudQuery v1.1.1 修复版本发布

BinTools图尔兹

数据库 sql 安全 工具软件

架构师训练营 - 第 4周课后作业(1 期)

Pudding

你听过CatBoost吗?本文教你如何使用CatBoost进行快速梯度提升

计算机与AI

Python 学习 优化

GO 类型接口及反射间的转换

superman

Go 语言

websocket 是怎么连接的

程序员与厨子

nginx 网络 HTTP websocket

从分布式到微服务成长手册,助我面试跳槽斩获字节Offer

Java架构追梦

Java 学习 架构 面试 微服务

有了容器为什么kubernetes还需要Pod?

架构师修行之路

分布式 微服务 pod kubernete

华为云数据安全中心正式公测,8大核心数据安全能力守护你的数据

华为云开发者联盟

华为 安全 数据

“一个APP竟然可以适配这么多设备?!”《优酷响应式布局技术全解析》开放下载

破绽

阿里巴巴 阿里云 开发者 优酷 电子书

REST和SOAP:谁更好,或者都好?_SOA_Mike Rozlog_InfoQ精选文章