写点什么

使用架构决策框架公平地比较 REST 和 WS-*:争论可以停止了吗?

  • 2008-05-11
  • 本文字数:1763 字

    阅读完需:约 6 分钟

去年,Olaf Zimmermann 及其 IBM 研究院同事开发了一个能促进企业应用开发的架构决策框架

在实践过程中,捕获架构决策对架构师来说依旧是一个挑战。已知的决策捕获抑制剂包括:项目发起人没兴趣、缺少时间和工具支持不足

他们提出了针对 3 个决策捕获步骤的概念框架:

  • 决策识别 —— 现实:决策识别仅仅基于个人经验,而且 [常常是] 临时性的。
  • 决策制定 —— 现实:决策制定者常常带有个人偏见……他们依赖于过去的经验……[或]……行业趋势。
  • 决策执行 —— 现实:训练、架构模板和代码互审是主要的决策执行方法。

通过给决策建模提供一个结构、积极主动的方法,他们意在:

通过决策依赖模型、决策驱动者目录和推荐的决策制定技术来改善决策制定质量

几周前,Cesare Pautasso、Olaf Zimmermann 和 Frank Leymann 在 WWW 2008 会议(在北京举行)上发表了一篇论文,详细比较了“ RESTful Web 服务大型 Web 服务(Big Web Service)”,对“制定正确架构决策”进行了深入探讨。

集成企业应用可以使用多种不同风格。这个选择……是一个重要架构决策。“大型”Web 服务技术栈(SOAP、WSDL、WS-Addressing、WS-ReliableMessaging、WSSecurity 等)提供了远程过程调用(RPC)和消息集成风格的互操作性。最近,另一种解决方案被提出来实现跨互联网的远程过程调用:所谓的 RESTful Web 服务。

分布式系统中关键的架构决策,如选择集成风格和技术,应该以每个备选方案的技术论据和具体交付能力的公平比较为基础。而 WS-* 与 REST 之争已经不幸地退化成了偏见和信仰的争论,这只能导致混乱和无法履行的期望。

在这篇论文中,[作者] 在架构原则和决策的基础上,采用了量化方法来比较这两种集成风格。

首先,作者详细地回顾了每种技术公认的优缺点: ### SOAP 和 WS-* 栈

除了它们公认的复杂性,SOAP 消息格式和 WSDL 接口定义语言作为能在异构中间件系统中提供互操作性的网关技术得到了广泛使用。

自相矛盾的是,这种由当今 WS-* 工具所提供的将已有软件组件方便地转化为 Web 服务的能力也会被滥用。这样,避免跨抽象级别的信息泄露就变得很重要。例如,在服务接口中出现服务实现的本地数据类型和语言结构就会引发互操作性问题。这个缺点可通过表述和强制某种设计和编码指南(如契约优先的开发)得到缓解。

REST

RESTful Web 服务的简单性是公认的,因为 REST 利用了现有众所周知的 W3C/IETF 标准(HTTP、XML、URI、MIME),这种必须的基础设施已经深入人心……这种轻量级的基础设施,使用极少的工具就能开发其中的服务,获取成本低廉且采用门槛很低。

[但是],关于公认的 RESTful Web 构建最佳实践存在一些混淆。高端 REST(Hi-REST)推荐已被制定,但是它们并不总被所谓的低端 REST(Lo-REST)实现遵守……[在实践中] 只有 2 个动词(幂等请求使用 GET,其他则使用 POST)被使用……[因为] 代理和防火墙可能不总是允许建立使用其他动词的 HTTP 连接……限制导致了一系列的替代方法(workaround),其中“真正的”动词要么使用一个特殊的 HTTP 头(X-HTTP-Method-Override)发送,要么就——如 Ruby on Rails——用一个隐藏框(——method)提交……

接下来,他们基于架构决策框架确定了一个比较方法。他们使用字面含义识别候选决策和替代决策。在使用 EST 和 WS-* 时,他们开发了几个记录架构决策的集成场景。他们为每种集成风格创建了一个决策模型,这使得他们能使用一些数据(如决策数量、每个决策的备选数量……)来客观的比较这两个模型。

作者接着继续比较了原则、概念和技术。他们的发现包括:

在原则层次,两种方法有相似的量化特征。在概念层次,在为 WS-* Web 服务决策时,必须制定的架构决策更少,而备选方案更多。

在技术层次,必须制定的决策数目相同,但是在构建 RESTful Web 服务时必须要考虑的备选方案更少。

特别地,作者说明:

这样,就从量化的观点认识了 REST 公认的简单性。[但是],据我们的经验,对于 RESTful 服务非常容易做出的决策会导致显著的开发努力和技术风险,如设计严格的资源规范和它们的 URI 寻址模式。

作者总结说:

……灵活地使用 RESTful 服务,特别是跨互联网的集成(以 Mashup 的方式),对于生命跨度更长和具有高级 QoS 需求的专业企业应用,优先使用 WS-* Web 服务。

查看英文原文 A Fair Comparison of REST and WS-* using an Architectural Decision Framework: is the Debate Over?

2008-05-11 03:091442
用户头像

发布了 255 篇内容, 共 57.5 次阅读, 收获喜欢 10 次。

关注

评论

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

企业内部信息碎片化该怎么办?不妨试试这样做

Baklib

唠唠python的作用域,看看每个变量都为自己打下了多少江山

迷彩

Python 函数 作用域 7月月更

Docker 安装 Minio 搭建属于自己的文件服务器

宁在春

Docker Minio 7月月更

MPLS基础知识概述

穿过生命散发芬芳

MPLS 7月月更

参数解析与跳石板

未见花闻

7月月更

车联网的数据安全该怎么保护

Geek_99967b

小程序 物联网

Plato Farm有望通过Elephant Swap,进一步向外拓展生态

鳄鱼视界

关于 StatefulWidget,你不得不知道的原理和要点!

岛上码农

flutter ios 前端 安卓开发 签约计划第三季

Bootstrap的导航元素和Well详解【前端Bootstrap框架】

恒山其若陋兮

7月月更

知识管理系统是什么?你需要知道这些

Geek_da0866

发评测赢好礼 | Serverless 函数计算征集令

阿里巴巴云原生

阿里云 Serverless 云原生

【刷题记录】22. 括号生成

WangNing

7月月更

SpringBoot应用使用Docker实现远程部署(保姆教程)

技术小生

Docker 7月月更

《TiDB 6.x in Action》发布,凝聚社区集体智慧的 6.x 实践汇总!

TiDB 社区干货传送门

数据库 分布式数据库 TiDB

低代码工具有哪些特色?明眼人都能看出来的低代码两大发展轨迹!

优秀

低代码 低代码平台

ES6 类聊 JavaScript 设计模式之行为型(一)

devpoint

JavaScript 设计模式 ECMAScript 6 7月月更

第五届数字中国奖项出炉,昇腾人工智能融合赋能平台斩获十佳首展成果奖

Geek_2d6073

模块8(消息队列存储消息数据的mysql表格)

Geek_701557

Prometheus 运维工具 Promtool (三)Debug 功能

耳东@Erdong

Prometheus 7月月更 Promtool

人工智能助力复工复产,模版 OCR 轻松搞定健康码识别

亚马逊云科技 (Amazon Web Services)

人工智能 Lambda

Web3.0 时代,基于P2PDB实现一款Dapp的技术理论

Rock-李益

dapp 去中心化 去中心化数据库 p2pdb

在灯塔工厂点亮5G,宁德时代抢先探路中国智造

脑极体

企业数字化转型成大趋势,选对在线协作工具很重要

Baklib

阿里云消息队列 Kafka-消息检索实践

阿里巴巴云原生

kafka 阿里云 云原生 检索 消息

聊聊自动化测试的度量指标

老张

自动化测试 质量度量

中天钢铁在 GPS、 AIS 调度中使用 TDengine

TDengine

数据库 tdengine 时序数据库

客户案例|生学教育依托观测云打造可观测智慧教育新生态

观测云

OPPO 自研大规模知识图谱及其在数智工程中的应用

NebulaGraph

知识图谱 NebulaGraph

提前批到底影不影响正式批?

KEY.L

7月月更

Mybatis中LRU缓存实现

Geek漫游指南

mybatis LRU mybatis源码

React 学习记录2📝

程序员海军

React 7月月更

使用架构决策框架公平地比较REST和WS-*:争论可以停止了吗?_SOA_Jean-Jacques Dubray_InfoQ精选文章