教年轻 AIoT 创业者如何从 0 到 1 实现AIoT 创业项目 了解详情
写点什么

Web 风格起过作用吗?

  • 2013-06-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 )关注我们,并与我们的编辑和其他读者朋友交流。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2013-06-21 10:361980
用户头像

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

关注

评论

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

React进阶(七):props 属性介绍

No Silver Bullet

React 12月日更 props

100行代码让您学会JavaScript原生的Proxy设计模式

Jerry Wang

JavaScript 设计模式 代理模式 28天写作 12月日更

资讯|WebRTC M95 更新

网易云信

WebRTC

WAVE SUMMIT+2021深度学习开发者峰会举办,开源共建助力飞桨生态发展

科技热闻

华为硬件配置命令,建议收藏

Ethereal

网络工程师 网络技术 华为设备 厂商设备 运维技术

【漫画】数据云,真香在哪?

星环科技

大数据

Python爬虫120例之案例58,手机APP爬虫,“武器库”的准备and皮皮虾APP的测试

梦想橡皮擦

12月日更

Java Web开发之API Boy的进阶之路

@零度

Java web API boy

“十四五”规划,开源重塑软件发展新生态,获国家重点扶持

腾源会

开源

Apache Log4j2,RASP 防御优势及原理

阿里巴巴云原生

阿里云 云原生 漏洞 可观测 Apache Log4j2

明道云对接小鹅通,沉淀内容付费平台数据

明道云

明道云荣获2021亚洲最佳职场“最佳创新奖”荣誉!

明道云

Android aapt 在 Mac 和 Windows 上使用方法小结

阿策小和尚

28天写作 Android 小菜鸟 12月日更

联邦学习在光大科技的落地应用

博文视点Broadview

给弟弟的信第15封|情绪控制的重要性

大菠萝

28天写作

东汉末年,他们把「服务雪崩」玩到了极致

悟空聊架构

熔断 28天写作 服务雪崩 悟空聊架构 12月日更

Java 集合框架面试问题集锦

编程江湖

面试题 JAVA开发 java编程

如何基于 Docker 快速搭建 Springboot + Mysql + Redis 项目

秦怀杂货店

Java redis Docker springboot redis sentinel

小程序的发布【小程序专题3】

坚果

小程序 28天写作 12月日更

一文讲述数仓组件SysCache

华为云开发者联盟

事务 存储 GaussDB(DWS) SysCache 缓存信息

5G专网+区块链:构筑智慧政务“安全信任基石”

CECBC

超细!细说Zookeeper选举的一个案例(上)

恒生LIGHT云社区

golang zookeeper Go 语言

跟着动画学Go数据结构之插入排序

宇宙之一粟

golang 数据结构 插入排序 12月日更

Spring Boot Serverless 实战系列“架构篇” | 光速入门函数计算

阿里巴巴云原生

阿里云 Serverless 架构 云原生 函数计算

前端开发:Vue中获取input输入框值的方法

三掌柜

28天写作 28 12月日更 12月

实用机器学习笔记十六:循环神经网络

打工人!

深度学习 学习笔记 循环神经网络 机器学习算法 12月日更

今夜无眠

Tiger

28天写作

从前端到全栈 -- 最全面向对象总结

程序员海军

Java 面向对象

All in one:如何搭建端到端可观测体系

阿里巴巴云原生

阿里云 云原生 可观测

PingCAP 入选 CB Insights 中国「数据链路安全领航者」榜单,保障全球用户存储安全

PingCAP

中石化信息化数字化首席专家李剑峰:数字化转型中关键基础软件的国产化应用

OceanBase 数据库

开源 国产化 oceanbase 中石化

  • 扫码添加小助手
    领取最新资料包
Web风格起过作用吗?_SOA_Mark Little_InfoQ精选文章