`
softstone
  • 浏览: 478142 次
  • 性别: 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的原因! ...

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

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

    人教四年级下册寓言两则字词闯关PPT教案.pptx

    同时,还列举了一些成语,如“百战百胜”和“百发百中”,强调了做事的精准无误,以及“聚精会神”和“喋喋不休”,对比了专注与唠叨的两种行为状态。 通过这份教案,教师可以设计各种教学游戏或活动,如字词卡片...

    处理客户投诉的方法和步骤.pdf

    对于特殊客户投诉,如易怒、下流、矜持、霸道、批评家、喋喋不休、古怪、犹豫不决、酗酒或爱争辩的客户,需要特别的处理技巧。这些客户可能因为各种心理原因如疲惫、挫败、自我保护、感到被忽视等原因变得难以应对。...

    处理客户投诉的方法和步骤.doc

    1. 易怒、下流、矜持、霸道、批评家、喋喋不休、古怪、犹豫不决、酗酒和爱争辩的客户都有各自的特点和心理需求。例如,易怒客户可能处于情绪压力之下,批评家可能寻求发泄,犹豫不决的客户则可能在寻找最佳解决方案...

    04技能综合及诊断复习指导.pptx

    7. **案例分析**:以27岁男性求助者为例,他的问题是感情困扰导致的失眠和心理不适。收集资料时,咨询师应关注时间、症状(如失眠、心慌)、冲突性质、严重程度以及社会功能受损情况等,以便进行后续的资料整理和...

    人教版四年级下册29寓言两则字词闯关课件实用课件PPT学习教案.pptx

    比如,“高明”与“拙劣”,“聚精会神”与“心不在焉”,“一声不响”与“喋喋不休”等,这些反义词对比鲜明,可以帮助学生深化对词汇的理解。 6. **成语应用**:“百战百胜”和“百发百中”是两个常见的成语,...

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

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

    形容唠叨的成语解释例句有哪些?常用描写唠叨的成语7个.docx

    在中国的汉语文化中,成语是丰富...这些成语不仅生动地描绘了唠叨的形象,也提醒我们在交际中应注意言辞的适量,避免过度冗长和重复,以免造成他人的困扰。了解并熟练运用这些成语,可以让我们在表达时更加精准、有力。

    小学五年级上册语文学会看病PPTPPT学习教案.pptx

    - 喋喋不休:形容说话连续不断,不停止。 - 按图索骥:按照已有的模式或指示去寻找或做事。 - 雪上加霜:比喻在原本困难的情况上再增加一层困扰。 - 艰涩:形容事物困难、不流畅。 - 沙漏:古代计时工具,象征...

    Storm入门书籍PDF

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

Global site tag (gtag.js) - Google Analytics