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

架构妄想:AJAX + REST的更多相关文章

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. 31、三层架构、AJAX+FormsAuthentication实现登陆

    三层架构 前段时间公司要求修改一个网站,打开后我疯了,一层没有都是调用的DB接口,遍地的SQL语句,非常杂乱. 什么是三层架构? 三层架构是将整个项目划分为三个层次:表现层.业务逻辑层.数据访问层.目 ...

  3. 基于mvc三层架构和ajax技术实现最简单的文件上传

    前台页面提交文件 <!DOCTYPE html> <html><head> <meta name="viewport" content=& ...

  4. C# Ajax 技术

    Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程 ...

  5. 2014年6月份第2周51Aspx源码发布详情

    AMX高效自定义分页控件(WinForm)源码  2014-6-9 [VS2008]2014.6.9更新内容:   1. 更改用户自定义分页控件功能布局.大大精简了调用分页自定义控件的代码,和使用系统 ...

  6. 2014年5月份第4周51Aspx源码发布详情

    最基本wcf服务器与客户端交互源码  2014-5-26 [VS2003]源码描述:本示例讲解的是最基本的wcf语法,示例浏览请先运行服务端,然后在运行客户端,适合想要学习wcf的初学者.仅供借鉴,欢 ...

  7. [知识库分享系列] 二、.NET(ASP.NET)

    最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...

  8. 2014年2月份第4周51Aspx源码发布详情

    AM自定义报表管理系统源码  2014-2-28 [VS2010]源码描述: 本系统有以下特色之处: 1.一套软件,多点登陆,根据权限不同共同管理报表,适应于前期获取客户需求报表字段使用. 2.客户自 ...

  9. 2013年9月份第1周51Aspx源码发布详情

    大型B2B家具门户网源码  2013-9-6 [VS2008]功能描述: 1.门户信息管理 安全取数据即使数据库连接中断不会报错 2.稳定性 每句代码经过3次以上检查.此网站还在运营3年了,没有出过问 ...

随机推荐

  1. Hibernate常用方法之_删除

    1.使用session的delete方法 public void deleteUser(User user){ Session session = null; Transaction transact ...

  2. 从统计学statistics的观点看概率分布

    已知数据x,希望得到未知label y,即得到映射x-->y: 几个概念: 1)p(x): data distribution 数据分布 2)p(y): prior distribution 先 ...

  3. 左侧导航条+中间显示内容+右侧菜单配置,Bootstrap+AdminLTE+Jquery

    1.最近做个导航页面,找了一大堆UI,最终选了AdminLTE,这个UI也是以bootstrap为基础,简单实用,中间内容用jquery的load加载,简单暴力,非常适合快速开发. 2.效果图如下: ...

  4. [洛谷P4208][JSOI2008]最小生成树计数

    题目大意:有$n$个点和$m$条边(最多有$10$条边边权相同),求最小生成树个数 题解:对于所有最小生成树,每种边权的边数是一样的.于是就可以求出每种边权在最小生成树中的个数,枚举这种边的边集,求出 ...

  5. Laravel中Redis的使用

    安装 laravel中使用redis首先需要你通过 Composer 安装 predis/predis 包: composer require predis/predis 配置 redis的配置文件是 ...

  6. bzoj进度条

    好久没发进度了 这个月没有上个月那么猛,肯能使因为这个月不想水题吧 No. 510 Solved Problems List Solved 368 10001001100210071008101210 ...

  7. 关于连通性问题的Tarjan算法暂结

    关于基础知识的预备桥和割点.双联通分量.强连通分量,支配树.(并不会支配树) 关于有向图的Tarjan,是在熟悉不过的了,它的主要功能就是求强联通分量,缩个点,但是要注意一下构建新图的时候有可能出现重 ...

  8. matlab求矩阵的鞍点

    function count = andian(a) v = max(a,[],2); count = 0; for i=1:length(v) [r2,c2] = find(a==v(i)); mi ...

  9. Spring学习--Bean 之间的关系

    Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...

  10. Flume的安装,配置及使用

    1,上传jar包 2,解压 3,改名 4,更改配置文件 将template文件重镜像 root@Ubuntu-1:/usr/local/apache-flume/conf# cat flume-env ...