re:Invent全球大会引领风向重塑未来 了解详情
写点什么

Web 风格起过作用吗?

  • 2013 年 6 月 21 日
  • 本文字数:2326 字

    阅读完需:约 8 分钟

在最近的一篇博客文章中,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 )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 6 月 21 日 10:361786
用户头像

发布了 31 篇内容, 共 63986 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

vue2的$refs在vue3组合式API中的替代方法

devpoint

Vue3 $refs vue2 this.$refs

Linux df 命令

一个大红包

linux命令 4月日更

如何利用ipad随时随地开发代码

程序员石磊

ipad 编程 远程

量化合约交易机器人系统开发|量化合约交易机器人APP软件开发

系统开发

使用transform制作书本翻页效果

空城机

JavaScript 大前端 4月日更 书本翻页

Rust从0到1-枚举-match控制流

rust 枚举 match

微擎的日志文件保存在哪里?如何查看。

微擎应用商城

十大经典系统架构设计面试题

程序员石磊

架构 面试 架构设计

很坑的Could not transfer artifact报错

CoderJ

maven Mac IDEA

征服耶鲁教授的算法大神程序媛,是如何践行“以人为本”开发智慧社区大脑的?

华为云开发者社区

算法 音视频 智慧社区 华为智慧园区数字平台 数字平台

合约量化交易机器人系统开发|合约量化交易机器人APP软件开发

Kafka源码阅读笔记(1)

InfoQ_Springup

kafka

拍乐云入选 2021 爱分析·产业数字化厂商全景报告

拍乐云Pano

RTC

与同事组队,用 3s 把工作节点打通,建立信赖与协作关系。

叶小鍵

百度联合清华,全球首个十亿像素数据集来了!

百度大脑

人工智能 百度

1分钟get什么是训练数据

澳鹏Appen

人工智能 机器学习 大数据 数据集

聪明人的训练(十六)

Changing Lin

4月日更

13年Java开发经验精华总结!29大核心知识模块,带你直达架构师!

Java架构追梦

Java 阿里巴巴 架构 全栈知识点

Google Analytics

曦语

数据分析

11 个非常实用的 Python 和 Shell 拿来就用脚本实例!

JackTian

Python 程序员 Shell linux运维 脚本语言

HTTPS双向认证

上海派拉基础研发

https HTTP ssl SSL 连接

合约量化机器人系统开发|合约量化机器人软件APP开发

系统开发

我们真的可以使世界成为无密码的地方吗?

龙归科技

网络 安全性

web简易视频聊天室+媒体流插入

anyRTC开发者

大前端 音视频 WebRTC RTC

量化合约机器人APP开发|量化合约机器人软件系统开发

系统开发

这份阿里P8大佬手写的 “Java核心面试精选” 疯传阿里内网

码农之家

Java 编程 程序员 互联网 面试

深入浅出带你掌握线程、多线程和线程池

华为云开发者社区

Java 线程 多线程 线程池 操作系统

MySQL性能监控与调优

Sakura

4月日更

5分钟教你学会GaussDB数据分布策略设计

华为云开发者社区

数据库 分布式数据库 GaussDB GaussDB(for openGauss) 数据分布

【LeetCode】删除排序链表中的重复元素Java题解

HQ数字卡

算法 LeetCode 4月日更

使用Python映射,过滤和缩减函数:所有您需要知道的

华为云开发者社区

Python 函数 映射 内置函数

撑起瞬时千亿交易额的云数据库是怎么炼成的?

撑起瞬时千亿交易额的云数据库是怎么炼成的?

Web风格起过作用吗?-InfoQ