之前已经写过一些对 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 大力支持背后的主要动机(之一)。
分享到:
相关推荐
易语言 喋喋不休远控
标题“喋喋不休”可能是指一个项目或软件的名称,但没有提供足够的上下文来确定这具体是什么。描述中的“喋喋不休”同样没有给出明确的信息,它可能暗示了该项目与持续通信、对话或者数据交换有关。由于标签为空,...
贵格 Quacker 与流行的微博应用程序密切相关。 用户可以查看其他用户发布的所有庸医。 登录后的用户可以发表、修改和删除自己的江湖骗子。 这个项目是的单页应用程序实现,它最初是用 Ruby/Sinatra 构建的。...
基于为Windows设备构建的LANChat应用程序,聊天可以让你和任何人聊天,通过多个网络! SATChat是一个聊天扩展,允许用户与世界各地的其他人聊天。 受Ham Radio的启发,该扩展程序连接到开放源代码IRC服务器,使人们...
2witter将推特的字符限制提高到140。在你的2witter的朋友们阅读的时候,你可以推着280个字符! 是否曾经需要发布不能用140个字符总结的东西? 这发生在我们身上,这就是我们设计2witter的原因! ...
推荐两款绿色免费语音朗读软件: 1、Balabolka(喋喋不休) 优点:小巧(8MB)强大功能、朗读效果极为出色、界面支持繁简中文 缺点:目前不支持中英文混读。内存耗用稍大110-150 2、ExtraSpeaker (语音朗读...
对于特殊客户投诉,如易怒、下流、矜持、霸道、批评家、喋喋不休、古怪、犹豫不决、酗酒或爱争辩的客户,需要特别的处理技巧。这些客户可能因为各种心理原因如疲惫、挫败、自我保护、感到被忽视等原因变得难以应对。...
1. 易怒、下流、矜持、霸道、批评家、喋喋不休、古怪、犹豫不决、酗酒和爱争辩的客户都有各自的特点和心理需求。例如,易怒客户可能处于情绪压力之下,批评家可能寻求发泄,犹豫不决的客户则可能在寻找最佳解决方案...
7. **案例分析**:以27岁男性求助者为例,他的问题是感情困扰导致的失眠和心理不适。收集资料时,咨询师应关注时间、症状(如失眠、心慌)、冲突性质、严重程度以及社会功能受损情况等,以便进行后续的资料整理和...
比如,“高明”与“拙劣”,“聚精会神”与“心不在焉”,“一声不响”与“喋喋不休”等,这些反义词对比鲜明,可以帮助学生深化对词汇的理解。 6. **成语应用**:“百战百胜”和“百发百中”是两个常见的成语,...
喋喋不休 此项目是iOS(Swift)程序的POC,它使用解析服务提供用户注册,身份验证和聊天。 要求 XCode 6.4(最低要求) iOS 8.0(最低) 可可豆0.38.0 测试推送通知: curl -X POST \ -H " X-Parse-Application-...
在中国的汉语文化中,成语是丰富...这些成语不仅生动地描绘了唠叨的形象,也提醒我们在交际中应注意言辞的适量,避免过度冗长和重复,以免造成他人的困扰。了解并熟练运用这些成语,可以让我们在表达时更加精准、有力。
- 喋喋不休:形容说话连续不断,不停止。 - 按图索骥:按照已有的模式或指示去寻找或做事。 - 雪上加霜:比喻在原本困难的情况上再增加一层困扰。 - 艰涩:形容事物困难、不流畅。 - 沙漏:古代计时工具,象征...
而“聚精会神”与“喋喋不休”的对比,让学生在感受两种行为状态的同时,也能学会在恰当的场合使用恰当的成语。 这份教案的亮点之一是设计了多种教学活动,如字词卡片匹配、拼音发音练习、近义词反义词辨析等,能够...
在2011年Storm开源之前,由于Hadoop的火红,整个业界都在喋喋不休地谈论大数据。Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据。但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢...