`
softstone
  • 浏览: 477714 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

担心未来的 REST 怪物正在形成

阅读更多

REST 的最大价值,在于它的简约;只要遵循上回帖子中提到的几个基本原则,便可直接充分利用 HTTP 和 Web 服务器先天具备的架构优势,包括 GET 的请求会被 Web 服务器有效地缓存,和因不需要维系各别的会话状态,而达到非常高的伸缩性。Google 和 Amazon 等所提供的 Web services,是最好的明证。这是 REST 的拥护者津津乐道的论点。

但如果照目前的气氛继续发展下去,过分炒作“REST 是比 SOAP 更适合于 SOA 的技术实现手段”、“SOA 未来的希望在 REST”这类危险的观念(上回谈的主题),其最终的结果,可能是既伤害了 REST,又对 SOA 没好处的双输局面。

此话怎讲?

目前一般认定的(企业级) SOA 服务,必须具备让有兴趣想调用该服务的消费者,自动发掘确切的服务端点、接口、和 XML 的 schema 结构的能力。在经常被引述、由Thomas Erl 所列的 SOA 八大原则中,便包括了 Discoverability 这条。此外,InfoQ 的 SOA 十大原?中的第三和第七个原则,也都与此相关(附带一提,关于这个“十大原则”,我认为它愈到后面,愈有画蛇添足的感觉,尤其是最后三条)。

不同于 SOAP,RESTful 形式的 Web services 是没有信封机制,只有赤裸裸的 payload,而 payload 的内容,往往是 POX (Plain-Old XML),当然也有人使用 JavaScript 对象表述 JSON。仅单就 XML而言,如果光是一个 instance,是无法确定其确切的 schema 结构到底是什么样子的。RESTful 的 Web services 先天上既缺乏像 SOAP 那样的一套信封 header 机制,可以用来注明相关的元数据,如 XML schema,又不像 SOAP 还有一个WSDL 搭档,来描述各种和服务相关的元数据,因此无法满足上述的 discoverability 原则(有些嘴硬的 REST 拥护者说可以通过 MIME type 来表述服务的元数据,但此说实在过于牵强)。当然,只要服务供应者通过网站发布清楚的服务 API 描述,通过事先的设置,RESTful 的 Web services 同样可以圆满达成任务,这样的例子在Web 2.0 的世界太多了,只是说,这样的服务,缺乏一套让消费者自动探索的机制,藉此利用自动化的工具,方便服务的组装和开发。

不意外地,随着 REST 的发烧,愈来愈多人探讨 REST 是否也像 SOAP 一样,需要描述语的问题(例如这里这里)。WADL 正是为满足 discoverability 需求下的产物。Sun 更已经把它纳入新的 JAX-RS 的一部分(关于 WADL,这儿有篇不错的简介)。有人批评 JAX-RS,指出它是想像 JAX-WS 之于 SOAP 那样,把根源于 CORBA IDL 和 Java interface那套面向对象的编程机制和架构,硬套到 REST 上。但如上次帖子里谈到的,REST 的应用设计理念和这样的作法,将格格不入。换句话说,它将不当地鼓励开发人员把 REST 当作“只不过是另一种 SOAP”来看待,而完全忽视 REST 的设计理念。REST 原始的精神和价值,将因而荡然无存。

除了 WADL 之外,如果 RESTful服务需要注明各种需要强制的服务战略 (policy),像服务水平、安全(身分认证、加密、签名...),另外像可靠性、交易等属性,是不是也需要有一个像 header 的地方,来放这些属性?按照这个趋势继续发展下去,有什么可以阻挡支持 REST 的大厂们,把它变成另一个 SOAP的?

还记得 SOAP 的诞生,最早可追溯到 Dave Winer 和 Don Box 等最早发展 XML-RPC 的那段历史吗(可参考 Wikipedia 的记载)?自从 SOAP 的发展从 RPC 导向转成文件导向,复杂度升高后,XML-RPC 的创始人 Dave Winer 因种种因素,遂转而去发展 RSS。我还记得约九年、十年前,RSS 还在 1.0 版本时,一般认定 RSS 的全名为 "Rich Site Summary" 或 "RDF Site Summary"。但自 Winer 氏积极参与 RSS 2.0 的制定后,开始将 "RSS" 用来代表 "Really Simple Syndication"。从他对 "RSS" 三个字母所代表的意涵诠释上,便明确显示出其对“简约”的强调。

随着将 REST 用于企业级 SOA 应用的声浪,REST 看来将承受愈来愈重的包袱,WADL 规范的推出,只不过是冰山的一角。我们必须好好问问,让 REST 重演当初从 XML-RPC 一路到 SOAP 1.2 的复杂化历史,是否具备充分的正面意义? 

分享到:
评论

相关推荐

    REST实战(REST in Practice)

    ### REST实战(REST in Practice)知识点总结 #### 一、REST简介与背景 - **REST (Representational State Transfer)**:一种软件架构风格,用于描述基于网络的应用程序如何工作。REST的核心理念是通过简单的HTTP...

    白话REST-识别真假REST

    REST(Representational State Transfer),即“表征状态转移”,是由Roy Fielding博士在其2000年的博士论文中提出的一种软件架构风格。REST强调基于网络的分布式系统的松耦合设计,并推崇无状态通信机制。在理解...

    nodejs+websock+rest+rest调用

    基于nodejs的websocket平台,该平台包括异步的数据库调用,异步的rest api访问,以及能够提供rest api的服务。该平台能实现基于ws的聊天室,可以将聊天的信息调用rest api存储到数据库,可以通过网页访问该平台提供...

    谷歌浏览器插件+AdvancedRestClient+Http Rest API测试调试

    1. 安装Advanced REST Client插件:首先,你需要在Chrome浏览器的Web Store中搜索“Advanced REST Client”并安装它。安装完成后,你可以在浏览器的扩展程序栏找到ARC的图标。 2. 创建新的HTTP请求:打开ARC,点击...

    cpprest实例工程

    cpprest库,全称是Casablanca,是由微软开发的一个C++ REST(Representational State Transfer)编程库,主要用于构建云应用和服务之间的通信。cpprest库提供了轻量级、高效且易于使用的API,使得开发者可以方便地...

    REST Server in Delphi XE Using DataSnap中文版

    ### REST Server 在 Delphi XE 中使用 DataSnap 的关键技术点 #### 1. REST 架构简介 - **背景**: REST(Representational State Transfer)是 Web 服务领域的一个重要概念,尤其在过去十年中,随着 Web 2.0 的...

    REST地图与天地图叠加

    本示例探讨的主题是“REST地图与天地图叠加”,这涉及到两种不同的地图服务技术的融合,即SuperMap iClient的REST地图服务和天地图服务。我们将详细解释这两种技术及其在Flex客户端下的叠加应用。 首先,REST...

    Rest Severs in Delphi XE Using DataSnap

    在Delphi XE中利用DataSnap构建REST服务器是一项强大的技术,可以帮助开发者创建高效、可扩展的Web服务。本文将深入探讨这一主题,介绍REST(Representational State Transfer)架构原理,以及如何在Delphi环境中...

    REST服务构建的web应用的优势和不足

    REST 服务构建的 Web 应用优势和不足 REST(REpresentational State Transfer)是一种混合架构风格,当前互联网的核心架构风格。基于 REST 服务(RESTful Service)的 Web 应用系统设计任务主要包括:识别并设计 ...

    java rest api入门实例

    REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,...

    kettle rest 接口 请求实例

    在Kettle中,REST接口提供了一种灵活的方式与外部系统进行通信,例如,发送和接收JSON数据,执行各种操作。本教程将深入探讨如何使用Kettle与RESTful服务进行交互。 首先,我们要理解REST(Representational State ...

    REST API.md

    REST是设计分布式网络服务或API时遵循的架构原则以及设计风格, 前后端分离最佳实践的开发标准或规范。本文为资料收藏的.md笔记,选取比较重要的资料,收集了以下内容: 重要概念介绍,如前述的第2-第4个关键词。 ...

    WCF REST service test

    **WCF REST服务测试** Windows Communication Foundation (WCF) 是微软.NET Framework中用于构建分布式应用程序的服务框架。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于...

    JIRA REST Java Client

    **JIRA REST Java Client**是Atlassian官方提供的一款用于与JIRA进行交互的Java库,它使得开发人员能够轻松地通过RESTful API访问和操作JIRA系统。这个库提供了丰富的功能,包括创建、更新、查询问题(issues)、...

    REST服务示例入门

    2. 由于【1】的改动,使得只有以/rest开头的URL才能映射到某资源,使用rest服务时,必须要加上/rest。 3. 由于【1】的改动,RestComponent类注册application时将资源字符串加上了/rest。 4. 由于【1】的改动和本人...

    C# 实现Rest服务接口,含实现文档

    本项目“C# 实现Rest服务接口,含实现文档”将详细介绍如何使用C#和ASP.NET框架来构建RESTful服务。 1. **C#语言基础**:C#是Microsoft开发的一种面向对象的编程语言,常用于Windows平台的应用程序开发,尤其在.NET...

    dubbox 2.8.4 rest调用

    【标题】"dubbox 2.8.4 rest调用" 涉及到的是一个基于当当网开源框架dubbox实现RESTful API调用的项目实例。dubbox是Dubbo的一个分支,它在原Dubbo的基础上增加了更多的功能,包括对RESTful服务的支持。REST...

    REST WebService简单应用

    REST(Representational State Transfer,表述性状态转移)是一种软件架构风格,主要应用于Web服务的设计,以提供简洁、无状态、基于标准的接口。REST Web Service是遵循REST原则的Web服务,它通过HTTP协议来实现...

Global site tag (gtag.js) - Google Analytics