Web风格起过作用吗?

在最近的一篇博客文章中,Jean-Jacques Dubray(JJ)提醒我们,自从Tim Bray预测SOA的死期,已经过去了差不多7年:

我曾经做过一个采访和一次播客[...]但在这两方面都浮现出了同一个问题,连走廊谈话也不例外:“你觉得我们该拿SOA怎么办?”,奇怪的是,以前从没有人问起过我这个问题,我能找到的唯一答案就是:“什么也别做。‘SOA’在以前可能还意味着什么,但是现在,它只是供应商们的胡扯罢了。”

Tim最后声称(预测)SOA不是未来的趋势,Web风格才是。如JJ所提到的,该预测开启了其他人在接下来的几年里不断追随效仿的大门,这其中就包括了Anne-Thomas Manes等人。它导致的其中一个结果就是许多SOA的项目都被搁置甚至取消了,JJ也有自己的一些前车之鉴:

我的经理在那时告诉我,Tim Bray的观点当时流传于整个IT部门,而且他也不知道怎么为他的管理工作找到一条出路。他的团队在当时已经构建了属于他们自己的ESB,而在那个时候还只有很少人听过XML,就因为Tim Bray写的一段话,就让我们多年的辛勤工作和不断增加的事务量(在2007年初的时候就有每天10M多的请求)毁于一旦。

JJ这几年在InfoQ和其他地方都花费了相当多的精力来探讨Web风格所忽视的问题。在他最近的文章里,他依然在关注那些打算实现Web风格的服务:

据我对[可编程的Web目录里的]9000多个API最好的估计,只有不到1%的API遵循了Tim Bray的Web风格。他们大部分只是遵循了“API”的风格,缺乏对RPC的支持。

JJ针对他上面所提到的内容列举了一些他认为最有代表性的示例:

  • AskZiggy 提供了定义“actions”的能力(sic)(例如Play,NextSong,Previous Song,Shuffle...)
  • WhatLanguage说明了你可以任意使用GET(如果你的请求少于7500个字符)或者POST请求来向同一个URI发送请求从而来判断一个给定的字符串使用的是哪种语言。
  • DO.com 可能看起来是在提供一个Web风格的API,但是它并没有真的做多少工作,它只是简单地对五种资源(tasks,project,users,...)进行了CRUD的操作。
  • SkyBuffer也同样遵循了Web风格,但是就像DO.com一样,也只是实现了对一些实体对象进行CRUD的操作。
  • 被称作“云API中心”的MaShape非常有意思,因为他们为开发者提供了一种更好的方式来使用API。那么他们是怎么做到的呢?他们邀请开发者“学习如何在MaShape上来描述你的API从而自动生成客户端类库和文档”。是的,你没有听错,不过经过多年的抨击以后,开发者们已经开始在讨论客户端类库代码自动生成的话题了。

JJ认为这种API的方式跟Tim等人所推崇的纯粹的Web风格是相违背的:

Web风格不就是讨论的“统一接口”、书签和自动配置的HATEAOS吗?不要忘却标准的IANA类型?是的,这些日子你是没有听过这方面的相关争论了。API规则。人们已经不再耻于在他们的URL和POST(复杂的)请求里使用动词了。最重要的是,MongoDB告诉我们跟这四个简单的动词和贫乏的URL语法比起来,还有更多的地方需要使用CRUD。开发者和架构师更渴望使用“Web风格”以至于他们甚至都尝试在JSON里添加命名空间了。

当看着这些似是而非的Web风格服务时,JJ得出了一个结论,它实际上已经无法兑现当时的炒作,实际上它已经“死”了。不管怎么样,JJ更加深入地进行了思考,并声明Web本身已经死了:

[...](对那些不知如何使用HTML5来创造任何有价值的东西来与Native应用竞争的)开发者,和(那些对Web业务模型核心“产品”的绝妙想法逐渐冷淡的)最终用户来说,整个Web几乎已经死了。TinBerner-Lee每六个月就现身一次来宣传“Web万岁”的理论,但是当安全滥用引爆众怒以后,貌似KBE(译者注:一种骑士爵位)也无法拯救Web了。

幸运的是这篇文章并不只是留给我们一个对于过去的悲观概述和高昂“技术债务”。JJ纵观今日以及诸如移动通讯等新浪潮的影响力,他坚信这可能代表了有史以来最大的范式转换(paradigm shift )计算:

可能很少有人会记得,软件工程就是构建在一个非常非常古老的范式——“文件处理”之上的,而它在UFS上达到了极致。桌面隐喻和个人电脑的主要使用模式依然停留在“文件处理”上。移动设备却不再是单纯的文件了,移动终端确实给我们生活中的各个领域都带来了便利,如果不出意外的话,那么未来的操作系统将是活动中心。

然而,他相信为了成功我们也必将超越Web技术:

最好的用户体验将会胜出,任何曾经、正在或者试图与之反抗的人终将会失败。如果Web崛起了,也是因为曾经它提供了更好的用户体验。如果它没有崛起,那是因为它仍然还是“Web”。

最后,JJ声明我们应该在解决问题的方式上更加务实,并且真正从过去的经验中吸取教训:

就算是使用像MongoDB那样设计良好的API,更多的增删改查也并不能把工作做得更好。我们还是需要形成这样一种理解,OO并不是描述分布式组件之间相互交互的正确范式。因此我们必须停止将我们所做的任何事情都实例化成无状态的单例方法调用。类上的注解不够强大以至于无法驱动由SOA开启的语义革命,而我们现在需要终止它。

但是即使认可JJ所提到的所有变化,那什么才是终极的目标呢?JJ认为它是一个健壮的复合编程模型(Composite Programming Model)。在该编程模型中,模型和视图是相互独立的,但依然是适当地相互关联的,而且还遵循activity/action/lifecycle的范式。不幸的是,JJ并没有在这篇文章中针对该模型做过多的细节探讨,但是他的意图很可能在一些相关的出版物中也会有所体现。

查看英文原文:Has Web Style Worked?

感谢赵震一对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Web风格起过作用吗?)