【AICon】AI 大模型超全落地场景&最佳实践 了解详情
写点什么

REST 的缺点是什么?

  • 2013-06-05
  • 本文字数:1792 字

    阅读完需:约 6 分钟

8 月 16 - 19 日,与零一万物李开复、蔚来李斌、面壁智能李大海,及工商银行、交通银行、华夏银行等 100+ 行业专家相聚 FCon x AICon

几年前,Ganesh Prasad 问道, Internet 比 REST 更基本吗?这些年,他不断围绕 REST SOA、以及更时新的云计算提出相关讨论,并且钟情于REST 的指导原则。然而,最近有人在 LinkedIn REST 架构师讨论组中的一片帖子中问道,“REST 的缺点是什么?”Ganesh 对此做了回复,然后又在其个人博客中重申了自己的观点

我不能说 REST 有“缺点”。它说到的都做到了,而且做得很好。但是,请记住 REST 架构的实现唯一使用的协议是 HTTP。我们可以肯定地想象 REST 在另一种传输协议上的实现,而且其中还包含诸多方面的增强。

接着,他谈到了四个可能改进的方面。值得一提的是,Ganesh 和许多人一样,将 REST 等同于 REST/HTTP,即基于 HTTP 的 REST:

  1. HTTP 是一个同步的请求响应式协议。这意味着它不能天然地支持服务端发起的通知(点对点),但这又是经常需要的。这就解释了为什么 REST 风格的应用程序中的回调需要使用应用层的设计模式,如 Webhooks。现在,我们有了 WebSockets 这样的双向传输协议,也许工业界应该考虑在其之上根据 REST 原则设计一款新的应用协议。” 这一点非常有意思,因为就在差不多一年之前,我们看到有些人甚至在探讨 WebSockets 和 REST 是否能够兼容的问题。
  2. Ganesh 认为,REST 社区从 Web Service 协议栈中至少能够学到一些东西:“这些协议都是基于核心的 SOAP 和 WS-Addressing 消息机制能力之上的端到端的协议”。过去,也有人提到过类似的建议。Ganesh 接着做了一个类比,他说 Web Service 之于 WS-Addressing、WS-ReliableMessaging、WS-SecureConversation 和 WS-Policy 好比 Internet 之于 TCP、IP 和 IPSec 等。Ganesh 认为,REST 的应用幂等性可以更好地实现可靠性(尽管并没有提到如何更好),而且可以找到 REST 事务的替代方案,但是他仍然留下了一个问题:

剩下的问题是安全。WS-SecureConversation 和 WS-Security 是可路由的,它们不同于 SSL/TLS,而后者却是 REST 唯一的安全机制。有了 WS-Sec*,就可以对消息进行部分加密,留下一些明文用于基于内容的路由和分支切换。这是 REST 缺乏对应的优秀方案的地方。SSL 是点对点的,不受代理检测,并且违反了 REST 原则。REST 对此只能忍受。

这一说法也非常有意思,我们也看到了有的人提出了一些想法,如 Resteasy 的 Bill Burke ,他提议, REST 需要更好地实现安全的方法

Ganesh 继续谈到了 REST 对一般性 QoS 的问题:

REST 不能支持这些一般性 QoS 背后的原因是,它们都需要维护“会话状态”。有状态(statefulness)存在明显的缺陷(如,影响可伸缩性和错误恢复),但是随着 Redis 之类的宣称常数时间(即 O(1))和高性能的 NoSQL 存储的出现,就有可能将会话状态从内存中转移到这样的存储中,因而可支持在多个节点间共享会话,进而可以满足 QoS 的需要。

回到 Ganesh 谈到的另外两点:

  1. 他认为,HTTP 的动词太少,尤其对于需要做点对点交互的场景。他建议:“INCLUDE(将资源加入到某个资源集合中并返回服务端设定的 URI)、PLACE(使用客户端指定的 URI 向资源集合中添加资源)、REPLACE(全部替换)、FORCE(PLACE 或 REPLACE)、AMEND(部分更新,它是一个容器动词,为一个资源子集指定一个或多个动词)、MERGE(通过提供的表述合并部分资源)、RETIRE(比 DELETE 更好)和 SOLICIT(替换 GET,它也是一个容器动词,用于告知响应端对发起方的资源做些什么,因为现在是点对点的场景了)
  2. HTTP 合并了应用层和传输层的状态码(如,304 Not Modified[未修改] 和 400 Bad Request[无效请求];407 Proxy Authentication Required[需要代理认证] 和 502 Bad Gateway[无效网关])。 REST 在另一个协议上的实现应该更清晰地隔离应用层协议和传输层协议。HTTP 承担了双份工作,因此其结果也往往不尽完美。

参照一下 HTTP 2.0 的初始草案,就能发现它不可能完全采纳 Ganesh 的建议。然而,Ganesh 本人在过去 5 年里好像一直致力于提出一个新规约:

我正在编写一个称作 Internet Draft 的新应用协议,它可以绑定任何传输(发布 / 订阅、异步点对点或同步请求 / 响应)。该协议是被我称为 ROMA(面向资源 / 表述的消息传输架构)的新型分布式计算架构的一部分,它不仅包含数据模型和消息传输 API,还包含更高级的功能(QoS、描述和流程协作)

该规约发布之后,如何解决这些已知的问题?是否能够获得 REST 社区的积极响应?将是很有意思的看点。


查看英文原文: What Are The Drawbacks Of REST?

2013-06-05 01:5314849
用户头像

发布了 184 篇内容, 共 77.8 次阅读, 收获喜欢 7 次。

关注

评论

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

帆软、永洪BI、瓴羊Quick BI等工具,都有哪些特点呢?

小偏执o

Terraform 新手村指南,萌新必读!

SEAL安全

Terraform 企业号 3 月 PK 榜

稳中求进的转折之年,企业如何重启“增长飞轮”?

脑极体

京东

「降本」有可能,「增效」不确定

Java 架构 程序人生 职场

IoTLink 版本更新 v1.8.0

山东云则信息科技

物联网平台 物联网 springboot

二本毕业,靠学姐帮助混进大厂,女朋友却离我而去

程序员晚枫

程序员 女朋友 大厂 校招

Chrome 无魔法使用新必应(New Bing)聊天机器人

kcodez

chrome ChatGPT newbing 新必应

matlab实现形态学图像处理

timerring

matlab 图像处理

排序算法 Quick Sort

Immerse

JavaScript 面试 前端 数据结构算法 算法、

字节跳动新一代云固件Cloud Firmware 2.0来啦

字节跳动技术范儿

云计算 Linux OCP

MSE 诊断利器上线

阿里巴巴云原生

阿里云 云原生 微服务引擎

架构实战营模块三作业

null

三天吃透消息队列面试八股文

程序员大彬

Java 消息队列

瓴羊Quick BI怎么样,BI工具数据看板见分晓!

小偏执o

易观分析:银保监会成为“历史”,金融行业将面临哪些重点影响?

易观分析

金融 经济

适合在公司内网部署的项目管理软件有哪些?

易成管理学

项目管理 项目管理软件

【MapStruct】引入MapStruct之后,项目启动java:找不到符号

No8g攻城狮

springboot 异常处理

规模化企业BI分析用哪家?帆软、永洪BI、瓴羊Quick BI深度对比

巷子

读者1群辛辣反馈,关于《中国式SaaS有没有希望(能赚钱吗)?|内行深度PK ​》

B Impact

自动化离线交付在云原生的应用和思考

京东科技开发者

云原生 离线 企业号 3 月 PK 榜 自动化交付

轻量级、简化、QDSAA—特斯拉 IT风格曝光160p Investor Day完整PPT

B Impact

配运基础数据缓存瘦身实践

京东科技开发者

数据库 redis 缓存 key 企业号 3 月 PK 榜

什么是大前端技术?微信小程序用户占比达25%

没有用户名丶

使用NineData构建任意时间点(PITR)数据恢复能力

NineData

开发者 数据恢复 dba 数据备份 全量同步

3DCAT+一汽奥迪:共建线上个性化订车实时云渲染方案

3DCAT实时渲染

实时云渲染 实时渲染云 3D实时云渲染

当TO B客户说“没有预算”时,怎么卖SaaS|SaaStr观点

B Impact

【实践篇】教你玩转微服务--基于DDD的微服务架构落地实践之路

京东科技开发者

架构 后端 企业号 3 月 PK 榜 微服务器

复杂业务架构设计方法论的思考

FluttySage

架构

物联网平台提醒欠费该如何查询和处理?——普及类

阿里云AIoT

物联网

ListView的数据更新问题

芯动大师

ListView 数据更新 demo源码

模块一作业

只因

架构训练营

REST的缺点是什么?_REST_Mark Little_InfoQ精选文章