10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

架构妄想

  • 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:413273

评论

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

🍃【Spring专题】「技术原理」Spring Security的核心功能和加载运行流程的原理分析

码界西柚

spring spring security 框架搭建 12月日更

架构实战营 4 期 - 第 3 周作业

周念

「架构实战营」

CNCC 演讲实录| 焱融 YRCloudFile 在 AI 训练中的性能优化实践

焱融科技

云计算 AI 云原生 高性能 文件存储

福建省等保测评机构有哪几个?机构名称叫什么?

行云管家

网络安全 等保 等级保护 等保测评

Shell脚本好学吗?看看这个带你了解shell中色彩处理和awk使用技巧

学神来啦

Linux Shell linux运维 awk linux云计算

Kubernetes容器平台架构之道

巨子嘉

云计算 Kubernetes 云原生

Angular 变化检测详解

PingCode研发中心

angular

ONES 事记|ONES 参与信通院牵头编写的《DevOps 通用效能度量模型》

万事ONES

SaaS SaaS平台

Java的异常处理

海拥(haiyong.site)

28天写作 12月日更

安全的IT自动化运维工具用什么好?可以节省时间吗?

行云管家

IT运维 自动化运维

起点决定高度:ONES 如何践行软件标准化

万事ONES

ONES 软件工具 企业管理软件

星环科技大数据与人工智能应用研究与案例分享

星环科技

人工智能 大数据 数据分析 数据开发 技术专题合集

OPPO大数据计算集群资源调度架构演进

安第斯智能云

大数据 后端

EasyAds:曾经自研的广告聚合SDK,如今在开源平台中唾手可得

EasyAds

sdk 聚合sdk 广告sdk 聚合广告sdk

ONES CTO 冯斌:如何在终身学习中跳出「恐慌区」

万事ONES

ONES

大数据开发之Hive SQL内置函数

@零度

大数据 Hive SQL

Nocalhost:云原生开发新体验

CODING DevOps

云原生 Nocalhost

撬动百亿VRAR产业,让VR们“造”起来

华为云开发者联盟

AR vr 数字人 元宇宙 VR开发应用

年末福利!专业级研发项目管理工具CORNERSTONE开源版正式上线!

优秀

项目管理工具

今天谈谈用户故事地图,不是用户故事

华为云开发者联盟

DevOps 敏捷 开发 用户故事 用户故事地图

在线JSON转JAVA工具

入门小站

工具

【转】Node进阶篇之基于 gRPC 协议的 Node 服务

@零度

前端开发 Node

Kubernetes API server工作原理

汪子熙

Kubernetes k8s 28天写作 docker image 12月日更

如何快速搭建一个简单的固资管理系统

全象云低代码

开源 前端 低代码 资管系统 低代码平台

软件开发中的常见的15个定律和原则释义及应用

码语者

软件开发原则 软件开发定律

【CSS 学习总结】第七篇 - CSS 布局-居中布局-水平居中布局

Brave

CSS 12月日更

Linux之locate命令

入门小站

Linux

年终招聘

张老蔫

28天写作

Python代码阅读(第72篇):回文

Felix

Python 编程 字符串 阅读代码 Python初学者

恒源云(GPUSHARE)_语音识别与语义处理领域之[机器翻译] 21.7 mRASP2

恒源云

深度学习 机器翻译 语音识别

如何使用ADLab搭建活动目录实验环境来练习渗透测试技术

H

网络安全 信息安全 计算机

架构妄想_REST_Boris Lublinsky_InfoQ精选文章