`
softstone
  • 浏览: 461247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

喋喋不休困扰 REST 的两大问题

阅读更多

  REST 是好东西,但受到两个问题的拖累。

  之前已经写过一些对 REST 的简介和看法。不久前恰好又在中文版的 infoQ 网站上看到一篇刚翻译成中文的文章,发现一些问题,于是又把整个 REST vs. SOAP 的论战再仔细看过一遍,刀光剑影,娱乐性十足。好消息是,最近这几个月,比较耸动或炒作性的 REST 话题似乎开始从网站、杂志头版消失。就来回顾和总结一下,事情其实很简单,REST 是被两个问题给害了。

  一是对 REST 技术本质的混淆,许多实现方式,号称是 REST,但其实不够格。这个比较容易解决。举例而言,infoQ 中文站今年一月刚发布一篇翻译自这篇 2006 年 5 月的文章(不推荐)。但不幸的是,作者选择将 POX (Plain Old XML) over HTTP 的实现方式,冠上 REST 和 RESTful 的封号。但看看作者天气查询的例子,最讽刺的是,如果看它采用的 XML 输入、输出格式,和用 HTTP POST 的交互方式,活像是个 SOAP-based 的 Web services - 只差没用 SOAP 信封格式将输入、输出文件包装起来。至于该 Web services 采用诸如 http://x.com/weather/WeatherQuery/2.0

  这种统一 end-point URI 网址的设计,更是犯了 REST 的大忌。真正合格的 REST 设计,就拿相同的天气查询做例子,服务调用(消费)端应该可以直接 GET 一个像

  http://x.com/weather/city/chicago

  或

  http://x.com/weather/zip/60661

  这样的独特网址,无需另外将参数透过输入文件,就能够获取查询结果。

  我们真正需要的,是更多像 Stefan Tilkov 这篇正视听的 REST 教学(中文版:深入浅出REST)。另外,我发现 Wikipedia 中对 REST 和 RPC 所作的比较,也非常有帮助,能够让习惯 OO 的开发人员快速体认到 REST 的设计哲学。在另一篇 infoQ 的文章中(同样推荐,但没看到有中译),作者探讨 REST 的 URI 超链接设计原则,并指出连 Flickr 等大站的 REST API,都看得到关于这个原则的错误示范。

  大量似是而非、自封为 REST/RESTful 范例的充斥,混淆了视听;令人担心的是,它们会引发“POX+HTTP 是 REST,因此 POX+HTTP 自然具备了 REST 优势” 的错误推论。

  来看过去一年 REST 热潮的第二大问题。这个问题比较棘手。根源在于某些激进派选择以 REST 单挑 SOAP+WS-*,且带着汉贼不两立的互斥、排他心态,来宣扬 REST 理念,彼得雷西 (Pete Lacey) 是其中的急先锋。正因为对上了 SOAP,企业计算和 SOA 的课题也不免被扯了进来。在 consumer Web 2.0 领域中,用户量巨大,信息相对公开,往往不需要如企业领域做到很细微的安全控制,REST 式的 Web services,过去几年在效能方面发挥得很出色;此外,简单易用,让想开发 mashup 等复合式应用的广大开发人员,能快速上手。这些都是有目共睹的。但 REST 的成功,逻辑上无法直接引申成 SOAP 的失败。此外,REST 狂热者往往以 HTTP 正统自居,认为不遵循 REST 原则和风格,便是对 HTTP 的“滥用”,例如在《深入浅出REST》一文最后,作者就表达了这样的态度。一位网友 Alex Xu 评得好:

  为什么要把REST跟SOAP对立起来?

  JSP,ASP,PHP难道不也是对HTTP的“滥用”吗?(按照REST的原则)

  电话线原本是给电话用的,但是后来人们用它来发传真,又用调制解调器上网,再后来ADSL,现在ADSL+.在这种途径上人们不断地挖掘潜力.为什么HTTP就不行呢?

  但正因为抱持了基本对立的立场,彼得雷西在这篇专访中,几近全盘否定地,一一数落 SOAP、WSDL、UDDI、WS-*,甚至 XSD 的不是。过分膨胀的论点,自然也招来了许多反证。例如 Paul Fremantle 表示据他所知,eBay 的 SOAP 服务每天要处理四千万的请求,而 Yahoo Mail 基本上也是基于 SOAP,而请求量也不会小。其他像是 SOA 专家 Steve Jones 驳斥了雷西关于解析 XSD 和 XML 文件格式弹性方面的抱怨。

  事实上,将 REST 和 SOAP+WS-* 看作有非此即彼的替代性,不如把它们看作是互补,让负责实现 Web service 的开发人员自行选择实现的方式。SOA 的原则本来自当如此 -- 由业务分析师和 IT 架构师先识别出服务,以契约(合同)的方式加以规范,而服务契约应该是独立于任何技术平台或实现手段之上的。接着下来才是讨论绑定方式、服务接口设计,和实现手段。同样的一套业务逻辑代码,可以根据为满足契约的实际情况,以多种方式封装、绑定。契约、接口、代码实现,乃至于团队分工方式,都应该是松耦合的。

  正如 Steve Jones 在多篇批判 REST 的博客中指出,更重要的是 IT 要如何更紧密地配合业务的变化,更快地去实现业务能力,这是 SOA 自始至终的目标。至于如何将一个文件从甲地运送到乙地,方式很多,REST 只不过是 SOAP、REST、JMS、RMI、MQ... 等众多选择之一而已,不该本末倒置。

  SOAP、WSDL 和几个主要的 WS-* 标准,多年发展下来,厂商和工具支持已相对成熟。REST 虽然在先天结构上较为简单,但就像彼得雷西自己在这篇博客回应中举的例子,选择 REST 的开发人员必须评估,在工具、框架支持相对不成熟的情况下,coding 的代价高不高?另外我想到一个普遍的企业应用场景 -- 当有安全私密性要求时,REST 应用可以很轻易地搭配 SSL/TLS。但内容一旦加密,许多被 REST 支持者津津乐道,包括能直接利用 Web 现有缓存机制的高伸缩性,便不复存在。有时候,甚至在内容没有必要加密时,因为必须根据用户身份权限对内容做过滤、个性化,此时如果采用 REST 和 HTTP GET,还必须确定告诉客户端和服务器之间所有行经的 Web 基础设施不许缓存,以免内容让不该看的人看到(不同于过去清一色 HTTP POST 的请求回应,默认的行为本来就不会缓存,许多开发人员早已视为理所当然)。在这类情况下,其他剩下来的 REST 优势(如简易),是否仍超越采用其他的技术手段?是企业开发人员必须面对的。

  有的科技大厂眼见 consumer Web 2.0 地盘长期以来被 LAMP 和 PHP、Ruby、JavaScript、Python 等占据,除了实验性地扶植 Groovy、Grails 之类外,现在冒出了这群 REST 激进派信徒,制造出非常戏剧性的冲突,大火既已点燃,岂可不好好利用一下 - 管他是否过分炒作或自我膨胀,先趁势而上,运用市场机器,加入炒作行列;同时推出一些支持 REST 的理论架构、开发框架、规范、或工具,借机让 Java 和 C# 的影响力能扩大到 Web 2.0 领域(包括消费和企业 Web 2.0)。我感觉这是厂商宣布对 REST 大力支持背后的主要动机(之一)。

  图片来源:bblfish.net/blog/page1.html

分享到:
评论

相关推荐

    易语言 喋喋不休远控

    易语言 喋喋不休远控

    喋喋不休

    喋喋不休

    quacker:节点中的喋喋不休

    贵格 Quacker 与流行的微博应用程序密切相关。 用户可以查看其他用户发布的所有庸医。 登录后的用户可以发表、修改和删除自己的江湖骗子。 这个项目是的单页应用程序实现,它最初是用 Ruby/Sinatra 构建的。...

    喋喋不休「Chatter」-crx插件

    小的聊天延伸,由Pascal海盗。 进行家庭聊天的前端,使用运行MySQL和PHP的服务器来处理服务器端数据传输。 指向内部提供的页面的链接,其中包含一些有用的技巧来进行服务器设置。 ... 支持语言:English (United States)

    2喋喋不休「2witter」-crx插件

    2witter将推特的字符限制提高到140。在你的2witter的朋友们阅读的时候,你可以推着280个字符! 是否曾经需要发布不能用140个字符总结的东西? 这发生在我们身上,这就是我们设计2witter的原因! ...

    600个脑筋急转弯问题

    一对健康的夫妇,为什么会生出一个没有眼睛的后代? 公鸡母鸡夫妇生的蛋,蛋没有眼睛 王老太太整天喋喋不休,可他有一个月说话最少,是哪一个月? 二月

    ExtraSpeaker 语音朗读精灵(无缝混读中英文)

    推荐两款绿色免费语音朗读软件: 1、Balabolka(喋喋不休) 优点:小巧(8MB)强大功能、朗读效果极为出色、界面支持繁简中文 缺点:目前不支持中英文混读。内存耗用稍大110-150 2、ExtraSpeaker (语音朗读...

    Chatter:利用Parse和LayerKit服务的iOS聊天项目

    喋喋不休 此项目是iOS(Swift)程序的POC,它使用解析服务提供用户注册,身份验证和聊天。 要求 XCode 6.4(最低要求) iOS 8.0(最低) 可可豆0.38.0 测试推送通知: curl -X POST \ -H " X-Parse-Application-...

    Passivity based Robust Control - 对于双连杆机器人:基于被动的鲁棒控制,它表明这种方法不能很好地处理变化。-matlab开发

    为了克服这个问题,我们需要使用基于滑动模式的控制算法。 虽然,喋喋不休是一个大问题,但如果我们能预测不确定性,我们就可以处理它。

    simula语言的诞生

    当每个人每天都在喋喋不休地说“面向对象”这个单词时,到底有几个人是真的了解这几个字背后的切实含义。是否认真切实地思考过面向对象这种思想的更一般的含义?本书提供了一条通路,可以让大家看到OO设计发轫的源头...

    Storm入门书籍PDF

    在2011年Storm开源之前,由于Hadoop的火红,整个业界都在喋喋不休地谈论大数据。Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据。但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢...

    linux学习笔记

    这位自由软件的“顶级神甫”为自己的梦想付出了大半生的努力,他不但自己创作了许多自由软件,如:GCC、和GDB,在他的倡导下,目前人们熟悉的一些软件如BIND、Perl、Apache、TCP/IP等都成了自由软件的经典之作。...

    屏幕操作录像软件

    为开发者,维护员提供软件演示与讲解录制服务,录制一遍以后就不用再喋喋不休了

    chatter:socket.io 测试

    喋喋不休socket.io 测试

    用Kotlin打造一个Router的示例代码

    0. 最近接收了从前的项目,之前的代码比较凌乱,准备重构。...为什么使用模块化开发:随着项目的越来越大,如果把所有功能都放到一个module里,对开发和测试来说都有一个效率问题,对开发来讲,由于各种业务代码混合在一

    Chatter:我的 Chat-IRC 应用程序的 DoS 系统

    喋喋不休 我的应用程序的 DoS 系统。 它包含 IRC 命令的子集,具有生成适当字节流的简单实现,以及允许工具连接到 IRC 服务器的简单客户端。 要发起攻击,有两种选择: # First compile the source $ javac ...

Global site tag (gtag.js) - Google Analytics