【什么是soa roa 谈谈两种技术的原理及适用场景】
本真REST当然是对面向资源架构的一种实现,而并非一种纯粹的技术决策。所以当讨论本真REST时,真正bai应该讨论的问题是:其基础支撑——面向资源的架构(ROA)——是否真的适合作为你的SOA实现。
为正确评估该问题,让我们首先回想一下SOA的架构风格,它是基于企业业务架构的功能性分解,并且引入了两个高层次的抽象:企业业务服务和业务流程。企业业务服务代表的是现有IT能力(和企业的业务功能相一致)。业务流程编排业务服务,并定义业务的整体功能。
而REST是一组被称之为面向资源架构(ROA)的架构准则。ROA构建在资源这一概念之上;每个资源都是一个能够直接访问的分布式组件,可通过一个标准的、通用的接口来处理。所以,面向资源的架构(ROA)其最根本的还是一种基于资源的分解[3]。
为了评估本真REST是否适用于面向SOA的实现,我们真正需要回答的问题是,“服务和资源之间到底是什么关系?”
服务 vs. 资源
何为服务?
在最简单的情况下,服务可以被定义为一个自包含、独立开发、可部署、可管理和可维护的软件实现,它从整体上为企业提供特定的与业务相关的功能,并且在设计上是“可集成的”。“服务”可以通过动词(verb)来定义(例如,“验证客户信用积分”,这描述了服务实现的业务功能)。
服务并不是某个编程结构或一组APIs,而是一个用于实现企业解决方案的架构(设计单元、实现以及维护)和部署构件。服务接口(尤其对某个给定的服务而言)定义服务功能,并且可由多种方式实现。存在两种基本的定义服务接口的方法——RPC风格和消息(messaging)风格,RPC风格实现使用服务调用语义并且通过服务接口中的一组参数来定义。而消息风格的服务接口被有效地固定(本质上只需要进行“执行”操作)使用XML文档作为输入和输出(这和GoF设计模式非常相似)。在这种情况下,服务语义是由输入和输出消息的语义来确定[4]。
过去,服务通常被定义为一组方法的集合,但正如参考文献[2]中解释的那样,这些方法彼此相互独立[5],但作为整体它们共享同一个命名空间,这样简化了对服务的管理。
何为资源?
在最简单的情况下,资源可以被定义为一个可直接访问的、独立开发的、可部署的、可管理的和可维护的软件构件,它支持特定的数据。资源可以通过名词(noun)来定义,比如“医生的预约”就描述了资源提供的数据。某一资源也可以和其他资源相关联并为它们提供引用(链接)。实际上,一个资源就类似于一个对象[6],不过它是带有预定义(CRUD)接口语义的对象。
REST中的语义基于HTTP操作集,如下所示[5]:
createResource——创建一个新的资源(以及相应的唯一标示)– PUT
getResourceRepresentation——获取资源信息– GET
deleteResource ——删除资源(可选地包括相关联的资源)– DELETE(只是引用的资源),POST(当需要删除相关联的资源时使用)
modifyResource——更改资源— POST
getMetaInforatmion——取得资源元数据信息—HEAD
资源通过两部分定义:资源URL和资源所提供的所有操作上定义的输入/输出参数[7]。这和服务不同,服务的方法之间是完全独立,并且能够以独立端点(endpoints)的方式部署,而资源上的方法遵循OO语义,这意味着所有的方法(除createResource以外)都必须依附于底层的某个资源(同一个URL)。
资源和服务之间的根本差异
基于上述对资源和服务的定义,凭直觉它们显然是不同的。我们先继续深究这些差别,然后再讨论它们是如何对最终架构产生影响的。
正如文献[6]中描述的:
REST不仅不是面向服务的,相反,面向服务和REST风马牛不相及
文献[7]中进一步阐明了二者之间的区别:
如果把WS-*比作是互联网世界的RPC,那么REST就是互联网世界的数据库管理系统(DBMS)……传统的基于SOA的集成表现了不同软件构件之间通过各种过程或方法进行交互。REST有效地将每个软件构件看作一组数据库表,而这些构件之间使用SELECT, INSERT, UPDATE和DELETE来通信。(或如你所想的使用GET, PUT, POST, DELETE)。那业务逻辑放在哪里呢?在存储过程中?不太对,其实在触发器中。
这里我们用J2EE打个稍微不太恰当的比方。我们把服务想象成无状态会话bean,而资源想象成实体bean。
服务(或会话beans)作为控制器控制执行所需的操作,不管底层是哪个资源。打个比方,某个支出账户服务可能会用到账户ID、支出金额和支出所需账户。这样的服务可以支出任何现有账户。
资源(或实体bean)充当数据访问机制,其面对给定数据类型的某一实例。比如,为了从某一账户支出,需要先找到这一账户相关的信息,然后才能更新它,从而向所需账户进行支出。另外提醒一下,与能实现任意所需的方法的实体bean不同的是,一个REST资源只有一个更改资源的方法。这意味着真实的业务操作——支出——只能编码成消息请求的一部分。
【什么是soa roa 谈谈两种技术的原理及适用场景】相关推荐
- 区块链和数据科学:如果同时应用这两种技术,将会实现什么?
区块链和大数据都是顶尖的新兴技术,有望彻底改变多个行业,从根本上改变企业和组织的运营方式.人们可能会认为这些技术是互斥的:每种技术都会形成独特的路径,且彼此独立地应用. 但你要是这么想的话,你就将会错 ...
- javaweb:会话管理和保存会话数据的两种技术(Cookie、Session)
会话: •会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题? •每个用户与服务器进行交互的过程中,各自 ...
- 百度网盘扩容两种技术讲解!真的有永久扩容吗?【粉丝福利】
今天给大家讲讲扩容,我要把百度网盘扩容讲干讲明白,讲的所有人都能看懂. 今天主要是1T以下只有105G的百度网盘扩容介绍和永久扩容的意思. 百度网盘扩容有两种扩容技术. 大于等于1T的网盘扩容技术 这 ...
- 以Attention Model为例谈谈两种研究创新模式
在研读AttentionModel相关文献过程中,我再次深切感受到了科研中的两种创新模式:模型创新与应用创新.若干年前,也就是在我年轻不懂事的花样年华里,具体而言,就是在科学院读博士的后期,这种感受就 ...
- EHIGH恒高:大话UWB技术之TDOA与TOF两种技术方案对比
超宽带(UWB技术)是一种基于IEEE802.15.4a和802.15.4z标准的无线电技术,它能够非常准确地测量无线电信号的飞行时间,从而实现厘米精度的距离/位置测量.不同于蓝牙.WiFi等其他定位 ...
- 谈谈两种标准库类型---string和vector
两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...
- c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完. 目前我选择C语言,Python和Java作为实现语言,因为这三种 ...
- 关于vue-router的两种模式以及原理
一.简介 众所周知vue-router 有两种模式 一种是hash模式 一种是history模式 首先是hash模式 hash --即地址栏URL中的#符号 比如这个URL:http://www.ba ...
- 几何基元_.NET异步协调基元中的两种技术比较
几何基元 Last week in my post on updating my Windows Phone 7 application to Windows 8 I shared some code ...
最新文章
- R语言构建xgboost模型:使用xgb.DMatrix保存、加载数据集、使用getinfo函数抽取xgb.DMatrix结构中的数据
- linux c warning 'XXX' declared 'static' but never defined解决方法
- python开发软件行么-python适合开发桌面软件吗?
- [HTML]增加input标签的multiple属性上传的文件数
- LeetCode 376. 摆动序列 中等难度
- TiDB 官方设计文档翻译(一)
- [蓝桥杯][算法提高VIP]种树(dfs)
- 【渝粤教育】电大中专幼儿园组织与管理 (10)作业 题库
- C++学习之路 | PTA乙级—— 1087 有多少不同的值 (20 分)(精简)
- onenote快捷键_高效飞快地使用onenote快捷键:快捷键功能架构解析
- linux下运行exe程序之wine的使用与安装
- 怎样修补渔网_渔网修补的方法
- qpsk psk matlab,BPSK和QPSK调制解调原理及MATLAB程序资料
- CentOS安装微软雅黑字体
- 华为交换机如何批量清除接口配置信息
- 柯尼卡美能达C364e安装步骤(全)-柯美复印机如何装机-柯美C364e驱动安装-柯美复印机安装扫描
- 踩坑记-- UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa6 in position 17: illegal multibyte seque
- jquery 常用选择器和方法以及遍历(超详细)
- 基于对比学习的目标检测预训练方法
- C1能力认证任务训练攻略详解