Web 风格起过作用吗?

  • Mark Little
  • 方盛

2013 年 6 月 21 日

话题:SOAREST移动语言 & 开发架构

在最近的一篇博客文章中,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 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

SOAREST移动语言 & 开发架构