QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Internet 比 REST 更基本吗?

  • 2007-12-24
  • 本文字数:2453 字

    阅读完需:约 8 分钟

正当一些人认为争论已经陷入僵局已结束的时候, Ganesh Prasad 又提出是存在一些比 REST 更基本(并更好)的东西,这无疑是给争论来了个火上浇油。正如他所讲,这个争论已经来来回回进行了好几轮了:

尽管我喜欢 REST,也把它当作是 SOA 的一个很优雅的模型,但每天都听到它比基于 SOAP 的 Web Services 模型怎么怎么好,确实有些厌烦。事实上,厌烦到我要学同样的方式对 REST 支持者做这种令人不舒服的姿态。

然后,他列举了一些 REST 支持者们用来做论据的核心思想:

REST 充分利用了现有最具伸缩性的应用(Web)的特性,不是吗?REST 与 Web 根本不冲突,它们一起工作的很好,不是吗?HTTP 是一个应用协议,而不止是一个传输协议,不是吗?URI 是定位资源的最自然的方式,HTTP 的标准动词是暴露使用资源可以做什么的最自然方式,超文本链接也是把这些连接起来以使整个系统成为一个状态机的最自然途径,难道不是吗?

然而,在他的观点里,随着 Internet 的成熟并更加具有扩展性,它比 REST 的扩展性更好也更具弹性。使用 Internet 模型(“它只是在智能网络中负责节点之间的消息传递”)会使你:

……Internet 的哲学是“傻瓜网络,智能端点”(当然请记住,这个网络不是真“傻”,而是故意只做些弹性包裹传递而把聪明藏了起来)。而被 Internet 用来传送包裹的协议,当然就是 Internet 协议(IP)。

而当你要添加新功能的时候,它简单得就像:

只用创建你自己的端对端协议并使用 IP 包承载你的消息有效负荷完成节点间的通信。你不用向任何“中间人”咨询或协商。事实上根本没有什么中间环节。

当 Ganesh 谈到 TCP 在 Internet 中的角色时(UDP 再一次被遗忘在历史的垃圾箱中),低级的的通信协议和更高级的应用协议栈的区别就显得清楚了:

TCP 在端点被解释。这就是为什么计算机上的网络软件都叫做 TCP 协议栈的原因。每一个连接到 IP 网络的计算机都可以叫做端点,只要一个 IP 地址就可以定位。端点负责处理 IP 消息的内部信息,而 Internet(即 IP 网络)完全不知道什么是 sockets 和端口号。这些概念都是由在它之上的协议创建和使用的。Internet 具有的扩展性和层次架构使得在不影响弹性包路由能力的基础上可以进行一个更复杂的网络抽象操作。

当然这个讨论和一直有关于 REST,SOA,WS-* 和面向消息的架构的讨论有些相似,因为达到松散耦合和伸缩性的核心原理是一样的:在服务端点后隐藏尽可能多的东西。为了证明 Internet 在变更需求时是多么的具有弹性和灵活,Ganesh 谈到了 IPSec,并问(修辞性地)是否添加了 IPSec 就对 Internet 做了大的改动:

……他们只是创建了另一个称为 ESP(Encapsulating Security Payload)的端到端协议和能够解释协议的端点。即他们在 TCP 和 IP 之间添加了一层新的协议。

在进一步参考“即使在电信领域Internet 也打败了电信网络”的时候,Ganesh 继续解释了为什么 REST(和 Web)并不比其他的分布式计算架构更优越。

Internet 是一个分散创新的平台。(见鬼,你们这些在大家面前晃来晃去的 REST 支持者们用的万维网就是一个在 Internet 上创新的例子。HTTP 不就是一个端到端的协议,不是吗?)

但 WS-* 哪里去了?到目前为止只讨论了 Internet VS REST(事实上是 Web),而没有 Web Services 或 SOAP。然而,在 SOAP-RPC 被遗忘了一阵儿之后,Ganesh 清楚地表示他对 SOAP 消息的定义是“带有 WS-Addressing 头的 SOAP 消息”,因为就像一个 IP 包,WS-Addressing 的使用同样给了你的消息能够独立路由的能力。然后他通过一些漂亮的图帮助阐述了这种关联性

现在想象一个消息传输架构,它只能路由 SOAP 消息……我们如何进行创新并在此之上建立更高级的功能呢?唉,当然是学 Internet 的模型啦。为每一个新功能创建一个协议并把协议数据嵌入到 SOAP 消息里面(尤其是 SOAP 的头部)。不需要把它们放在 TCP 协议栈里,因为可靠性传输,安全,事务等等都是正交无关的。可以把它们放到 SOAP 的头部作为同一层存在…

通过这种方式,我们最后得出的一点是“一个松散耦合的服务生态系统需要象管道一样随意装配”。当然这并不足以创建基于 SOA 的应用(象其他有些人一样,Ganesh 好像把 SOA 和),这时 XML 成了救世主。Web Services 画上了等号

那么现在请使用一种 XML 模式定义语言和你选择的词汇(为银行,保险或航空业)来定义文档契约,把对应的 XML 文档象我们谈到过的一样嵌入到 SOAP 消息体中,并保证消息的生产者和消费者都只依赖于那些文档契约。这样就可以了!松散耦合的组件!面向服务的架构!

假如真的象在现实世界的标准中真的那么简单,你得到的也只是一些一般的要点。但如果真的那么容易,有一个明显的问题就是:为什么我们还没有做到呢?Ganesh 认为这背后有六个原因:

  1. 现有的 SOAP-RPC:“即使在今天,还有一种思潮说使用 WSDL 就意味着 RPC ,但我对于被包装的 document/literal 风格感到满意,它让我们远离了喧嚣的 RPC encoding”。
  2. 除了 HTTP 之外,SOAP 缺少绑定相关的标准
  3. 需要穿越防火墙的隧道,这和 SOAP/HTTP 缺省绑定有关。“我们需要为 SOAP 自己指定一个端口,并使防火墙对此端口开放。不要因为我们喜欢 80 端口就一直使用 HTTP。”
  4. “集中消息代理软件提供商还在假装接受 SOAP/WS-* 的远景(‘我们在标准委员会里!’),但其实他们还在以中间件谋生,而不是端点软件。”
  5. 业界还在被未开放源码的 WS-* 协议栈所统治。
  6. 事实上,很多重要的 WS-* 规范(事务、安全、可靠性等)最近才成熟(不论是被使用的,还是开发了 5 年的)。

最后,他相信 SOA 只有两种可行的途径,就是 REST 和“采用智能端点的 SOAP 消息传输处理”,而其中 REST 并不占明显的优势。

查看英文原文: http://www.infoq.com/news/2007/12/rest-ws-payback - - - - - -

译者简介:戴垚,2000 年计算机硕士毕业后一直从事软件开发管理工作,目前在一家大型外企担任开发部门经理。关心软件技术和相关工具的动态,深信技术的使用应以创造价值为根本。目前致力于 SOA 的研究,希望能对业已复杂的企业环境有所帮助。参与 InfoQ 中文站内容建设,请邮件至 china-editorial@infoq.com

2007-12-24 01:39962

评论

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

回帖送大奖 『和AI在一起』

百度大脑

人工智能 活动 大奖

PancakeSwap交易所市值管理机器人开发

Geek_23f0c3

市值管理机器人开发 PancakeSwap交易所 交易所机器人

音视频的这些功能你知道吗?

anyRTC开发者

音视频 屏幕共享 智能降噪

从零开始学习3D可视化之数据对接(2)

ThingJS数字孪生引擎

大前端 数据 可视化 数字孪生

因聚而生 | 图扑受邀参加“生态融合,智创未来”大会

一只数据鲸鱼

数据可视化 数字孪生 智慧工业 智能制造

深度分享|金融行业模型管理效能提升的规划与思考

索信达控股

大数据 金融科技 金融 风险管理 营销管理

JAVA语言异步非阻塞设计模式(应用篇)

有道技术团队

后端 网易有道

关于单元测试的那些事儿,Mockito 都能帮你解决

华为云开发者联盟

测试 Mockito Mock Java 开发 模拟测试框架

从京东零售云走出来的3D数字人正在触动未来的互动世界

阿里内部最新出炉“SpringCloudAlibaba笔记”号称微服务界的里程碑!

Java 编程 架构 微服务 计算机

鉴释陈新中:源代码安全在物联网时代的重要性

鉴释

物联网 源代码

字节大牛的1850页Leetcode刷题笔记外泄!用实力折服众人

进击的王小二

Java 面试 算法 LeetCode

漏洞非小事,金融服务机构如何对抗代码缺陷?

鉴释

金融科技 代码安全检测

阿里集团业务驱动的升级 —— 聊一聊Dubbo 3.0 的演进思路

阿里巴巴中间件

云计算 阿里云 云原生 dubbo 中间件

架构实战营模块2课后作业

hello

架构实战营

Go语言:参数传递中,值、引用及指针之间的区别

微客鸟窝

Go 语言

互操作性和去信任化的两难困境,到底需要治标还是治本?

CECBC

支持60+数据传输链路,华为云DRS链路商用大盘点

华为云开发者联盟

华为云 DRS

iOS面试·一个iOS程序员的BAT面试全记录(内含百度+网易+阿里面试真题)

iOSer

ios 面试 iOS 知识体系

网络攻防学习笔记 Day82

穿过生命散发芬芳

网络攻防 7月日更

为什么“内存管理”漏洞值得你的绝对关注!

鉴释

代码审查 内存 代码

不保护数据的代价!

鉴释

数据 数据安全

真的强!来自扫地僧总结的39W字上千道Java一线大厂面试题手册,成功助我拿下蚂蚁金服offer!

钟奕礼

Java 编程 程序员 架构 面试

Camtasia入门技巧之视频剪辑

淋雨

视频剪辑 Camtasia 录屏软件

赖建新:关于静态代码分析的问与答

鉴释

静态代码分析

华为云MVP程云:知识化转型,最终要赋能一线

华为云开发者联盟

人工智能 自然语言处理 机器学习 华为云 智能问答机器人

给需要关心安全的技术人员的一些建议

鉴释

网络安全 安全

数字经济时代下,区块链如何助力数字产业发展?

旺链科技

区块链 分布式存储 数字经济

ES本地debug详解

泽睿

ES 搜索引擎;

新时代程序员都用什么写代码?

程序员鱼皮

Java Python 大前端 Web 开发工具

耗时半年,堪称奇迹!阿里架构师整合出258W字Java全栈面试题

钟奕礼

Java 程序员 架构 面试 计算机

Internet比REST更基本吗?_SOA_Mark Little_InfoQ精选文章