写点什么

架构妄想

  • 2011-10-02
  • 本文字数:990 字

    阅读完需:约 3 分钟

William Vambenepe 的最新文章, AJAX + REST 是最新的架构妄想,让我们回想起了一个具有 15 年历史的架构,它曾被寄期望对 Web 产生革命性的影响。

在该架构里,Web 服务器将返回包含全部数据的 XML 文件,与 XML 一道,还会返回一个 XSLT 文件(用于描述如何将 XML 转换成 HTML)。浏览器将依此处理 XML 数据,显示最终的 HTML。搞定!该方式将带来很多好处,优于老式的“服务器生成 HTML”模型。XML 可以被其他应用方便地使用(不仅仅是人类),不同的 XSLT 可被用来将内容适配到各种客户端平台。

光阴飞逝,但这种理念其实从未真正实现。现在,我们又快速地转向 Ajax:

XML 文档还在,尽管它通常被称为 JSON。XSLT 现在则是一大堆 JavaScript。比起 XSLT 模型,这种模型有许多优势……它更灵活,可以实现小规模更新,以及部分页面刷新等等。但是,它是否也能够让架构保持清晰,使数据 API 与表现逻辑相分离呢?

Vambenepe 解释了原因,尽管它看上去优雅并包含了所有的架构优点,但该模型在大多数情况下并不实际:

相同服务的客户端支持多种交互模型,若不无限制的蔓延开来,单个 API 很难满足所有这些模型的需要(这里,所谓“单一 API”,其实就是一块遮羞布)。但若是想让 API 保持外观简洁,你最终可能就会得到交互频繁的应用。

但是在 Vambenepe 看来,这仅仅是该方法诸多问题中的一个。他指出的另一个大问题是该方法的事实:

……摒弃集成了浏览器代码和服务器代码的架构……不是所有 Web 开发者都认为他们的客户端框架和服务器框架是两套工具。将它们整体作为一个预先装配好的工具使用或许不会得到最优的代码,但可能还是可以最优利用你的开发资源。

尽管 Vambenepe 有强有力的论据,他的帖子还是遭到了质疑。什么才是正确之路?为现有 UI(如 GWT 风格)创建 / 生成单独的 REST API?一方面,这种方法简化了 UI 实现;另一方面,每个 UI 都要有一个新 API。这种方法的伸缩性更好吗?哪个代价更高?实现 UI 集成,还是后端 API?由这个帖子还产生了另一个更严肃的问题:什么是正确的设计方法?先实现后端 API,然后设计多个使用它的 UI;还是开始从 UI 开始设计,然后再定义支撑它的 API?传统来看,API 实现的代价似乎更高,但 API 本身要比 UI 更稳定。

因此,没错,满足各种需求的单一 API 看起来是架构妄想。但是,一组设计良好、轻巧可重用的 API 可被用来作为许多 UI(Ajax)实现的基础。

查看英文原文: Architectural Mirages

2011-10-02 03:413086

评论

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

问答知识库快速构建技术解析及行业实践

中关村科金

人工智能 大数据 AI 知识图谱 技术实践

云起无垠入选《ISC 2022数字安全创新能力百强》

云起无垠

阿里云联合“产学研媒”发起BizDevOps共促计划,助力企业提升组织效能

阿里技术

研发效能 数字化转型

数据报告 | 非洲电商市场分析报告

前嗅大数据

数据报告 电商报告

YonBuilder移动开发平台AVM框架 封装滑动单元格组件

YonBuilder低代码开发平台

开发者 后端 移动开发 avm.js AVM

喜讯|云起无垠实力入选《2022年度中国数字安全能力图谱》

云起无垠

CAS Fuzzing

一文解读机密容器的崛起和发展

云布道师

龙蜥

Coinbase或在不久使用Zebec发放工资,并对Web3支付赛道发展寄予厚望

鳄鱼视界

Nginx学习笔记(一)HTTP核心配置指令

Starry

网易云音乐用户画像资产治理及业务赋能

网易数帆

数据仓库 数据治理 数据资产 12 月 PK 榜

什么样的CRM,才值得企业为之买单呢

ToB行业头条

户外LED显示屏技术

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

不止于大,如何打造优秀的折叠屏应用体验

HarmonyOS开发者

HarmonyOS

教你用JavaScript实现背景图像滑动

小院里的霍大侠

JavaScript 编程入门 实战案例 图像滑动

Coinbase或在不久使用Zebec发放工资,并对Web3支付赛道发展寄予厚望

西柚子

Coinbase或在不久使用Zebec发放工资,并对Web3支付发展寄予厚望

股市老人

TiCDC 源码解读(2)-- TiKV CDC 模块介绍

TiDB 社区干货传送门

ShineScrum捷行2022年最受欢迎的五篇文章回放

ShineScrum

PO 用户故事 项目经理 PRD 团队工作效率

我和 TiDB 的故事 | TiDB 仓库 commit TOP 1,PR 数超过 1000 的阿毛哥

TiDB 社区干货传送门

人物访谈

V8的垃圾回收和内存限制

千锋IT教育

消除视觉Transformer与卷积神经网络在小数据集上的差距

华为云开发者联盟

人工智能 华为云 12 月 PK 榜

MySQL的数据类型和存储引擎介绍

C++后台开发

MySQL 数据库 中间件 后端开发 存储引擎

Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发

华为云开发者联盟

开发 数据处理 华为云 12 月 PK 榜

低代码开发平台YonBuilder移动开发,开发阅读APP教程

YonBuilder低代码开发平台

App 低代码 移动开发 阅读 开发.

What's new in Dubbo 3.1.4 and 3.2.0-beta.3

Apache Dubbo

Java 开源 微服务 dubbo RPC

请求量太大扛不住怎么办?进来学一招

捉虫大师

Go 性能优化

作为程序员,12款常用的软件!

千锋IT教育

践行开源理念,统信软件开放服务器操作系统UOS V20使用授权

统信软件

操作系统 服务器 国产化 免费

解读Java内存模型中Happens-Before的8个原则

华为云开发者联盟

Java 开发 华为云 12 月 PK 榜

Go 中这么多创建 error 的方式,你真的了解它们各自的应用场景吗

Go学堂

golang 开源 程序员 个人成长 12月月更

架构妄想_REST_Boris Lublinsky_InfoQ精选文章