- 浏览: 279369 次
- 性别:
- 来自: 东方水城
文章分类
最新评论
-
18335864773:
pageoffice 插件 可以实现 office文档的在线操 ...
Java调用com组件操作word -
coosummer:
推荐使用在线免费bug管理系统- bug 禅思:http:// ...
Bug管理工具 -
program_coco:
柠檬bug管理系统,一个在线的bug管理系统。www.lemo ...
Bug管理工具 -
影非弦:
这个in.read(data);//data是一个byte[] ...
Java串口通信总结 -
影非弦:
这个不详细啊,我弄了一天了,都没弄出来,总是出错,读信息的时候 ...
Java串口通信总结
Web 服务、 REST 风格的服务及其它与 XML 传输相关的技术介绍
在上节中,我们讨论了使用 XML 实现 SOA 有哪些优势,但并没有说明 SOA 就是由 Web 服务构成的。 SOA 和 Web 服务有时在同一场合中被混用,因而人们对此产生了一些误解。 SOA 是一种方法,是架构设计中的一种选择,它与技术和语言无关。在面向服务的架构中,服务并不是 Web 服务的简称,而是一种宽泛意义上的服务。我们可以在不考虑任何具体技术实现的前提下,设计出某种获得所有商品列表的服务来。
按照 SOA 进行设计的意思为,针对某一特定的业务领域,设计出符合业务规则的高层接口。当然,但产品或项目进行到某一阶段时,我们必须要选择具体的实现方式。下面我们就讨论一下 SOA 有哪些实现方式,从比较简单的手工方法,到业界广泛采用的技术标准 (SOAP) 。
在进一步讨论之前,我们先了解一下本书中涉及到的几个术语。协议 (Protocol) 这个词在本书中的意思会依据上下文有所不同,其中一个关键是要区别“传输协议 ( 亦称网络协议 )(Transportation or layer protocol) ”和“交换协议 (Communication protocol) ”。传输 ( 网络 ) 协议是指传输信息所使用的网络协议,它可以是广泛使用的 HTTP 协议,也可以是允许异步传输的 SMTP 协议或 JMS 协议;而交换协议需要考虑如何把消息放到 XML 文档中,如何把消息从从 XML 文档中提取出来。交换协议是我们本节讨论的重点。
首先,我们开始手动搭建一个简单的系统,在该系统中, XML 请求和应答都通过 HTTP 协议传输,这将有助于我们从根本上理解消息交换传输的机制。然后,我们将使用 REST 来使我们的系统标准化。使用 REST 技术后的系统仍然是 SOA 的一个比较基本的实现,但系统将变得非常简洁,并使用了良好设计的信息交换协议。最后,我们将采用 SOAP 技术让这个系统成为具有可移植性、更加完全和灵活的解决方案。
SOA 设计之基础 --- 定义 SOA 服务的 XML 文档
SOA 服务的设计过程是一个会产生许多成果的过程。首先,它将产生一系列的服务定义列表,我们有时也称之为“服务目录”,这些集合自然不是扁平的列表,而是以节或功能域的形式组织起来。比如,我们可能有商品功能域、订单功能域及客户功能域等等,在这些功能域下,我们可以定义一些具体的服务。例如在商品的功能域下,我们可以定义如下服务:
insertItem--- 新增商品服务
updateItem--- 修改商品服务
deleteItem--- 删除商品服务
findItemById--- 按照商品 Id 号发现商品的服务
findAllItems--- 找到所有商品的服务
findItemsByCriteria--- 按照某种规则找到商品的服务
再如,订单功能域的服务可能有:
createOrder
findOrderById
findAllOrdersByCustomer
我们通常还需要定义一些跨功能域的服务 ( 正交服务 ) 。有些服务可以共享一些诸于控制流或交易处理之类的通用过程。
一般说来,在软件设计的初始阶段,人们都专注于基本的业务域对象及对这些业务对象进行处理的基本操作上,这些操作包括增删改查等,亦称之为 CRUD 操作,即 Create 或 Insert 、 Read 或 select 、 Update 和 Delete 。不管您使用什么语言,采用何种软件架构,您的项目或产品都需要处理这些增删改查操作。在我们这个例子中,基本业务域对象为商品实体,上面服务列表中的前 4 个定义即为该对实体的 CRUD 操作。
接下来,我们开始就商品这个业务对象的服务进行分析和设计。比如, insertItem 服务可能具有如下格式:
创建
服务输入 |
服务名 |
服务输出 |
<Item> <id>0</id> <code>RX004</code> <description> Eth. Cable </description> </Item> |
=> insertItem => |
<Result> <retCode> OK </retCode> <id>137</id> </Result> |
客户端如果想使用这个服务插入一个新的商品,它必须按照上面的输入格式提供一个 XML 消息,请注意在输入消息中, id 属性值为 0 ,这是因为我们假定 Server 会在 XML 应答中为这个商品分配一个 id 号。
对商品这个业务对象,其它的三个 CRUD 服务的 XML 定义可能如下:
读取
服务输入 |
服务名 |
服务输出 |
<ItemId> |
=> findItemById => |
<Item> <id>137</id> <code> RX004 </code> <description> Eth. Cable 4 ft. </description> </Item> |
修改
服务输入 |
服务名 |
服务输出 |
<ItemId> |
=> findItemById => |
<Item> <id>137</id> <code> RX004 </code> <description> Eth. Cable 4 ft. </description> </Item> |
删除
服务输入 |
服务名 |
服务输出 |
<ItemId> |
=> deleteItem => |
<Result> |
上面的设计就是一种我们可以采用的信息交换的例子。实际上,在上面的情况中,我们可以随便决定使用何种信息交换协议,因为它没有任何约束。例如,我们可能发现,采用单一的输入输出模式可能更好,我们就可以把所有的 CRUD 操作都包含在一个服务中。那么,此时的输入 XML 消息中就会含服务名称和服务对象,输出的 XML 中会包括返回值和商品对象,它们的定义如下图所示:
通用的 CRUD 操作
服务输入 |
服务名 |
服务输出 |
<ItemAction> <method> findById </method> <item> <id>137</id> <code></code> <description> </description> </item> </ItemAction> |
=> itemCrudService => |
<ItemActionResponse> <retCode>OK</retCode> <item> <id>137</id> <code>RX004</code> <description> Eth. Cable 4 ft. </description> </item> </ItemActionResponse > |
这里我们只对 CRUD 操作定义了一个服务,但这是要付出代价的。当我们调用 findById( 通过 id 查找 ) 和 delete( 删除 ) 服务时,我们必须要为输入 XML 中提供商品的部分属性值,其实,在这两种情况下, id 属性值就足够。只有在更新商品时,需要提供商品这个实体的所有属性值。另外,在服务输出的 XML 中,只有 findById 服务需要所有属性都被赋值的商品对象。
但是,在通常情况下,增删改查 (CRUD) 这四个服务是远远不够的。例如,对商品这个业务对象而言,我们需要定义一个返回所有商品的方法,或者至少能返回一部分商品的方法。我们可能为这个服务定义如下的规范:
非增删改查 (CRUD) 操作
服务输入 |
服务名 |
服务输出 |
void input |
=> findAllItems => |
<Items> <item> <id>137</id> <code>RX004</code> <description> Eth. Cable 4 ft. </description> </item> ... </Items> |
现在,我们已经讨论了服务设计者在设计时可能采用的方法。您会注意到,消息交换的定义通常完全取决于您 — 服务设计者,没有什么可以遵循的规则,您只需要使用您的设计技巧来抽象化这些概念。
一旦您完成服务的消息交换定义 ( 您的定义可能如上所示,也有可能和上面的有所不同 ) ,我们就需要考虑网络交换协议及其细节了。 HTTP 协议是一个实用而具有灵活性的协议:我们可以使用 HTTP 协议传输 XML 请求,这种方法也称之为 POX-over-HTTP ,这里 POX 指 Plain OId XML 的缩写 ( 简单的旧 XML 格式 ) 。
在实践中,我们只需要使用 XML 转换 API 库把我们程序语言中的对象转换为 XML 文档,然后再转化回对象即可,这样,我们就可以实现我们上面所定义的服务。我们甚至还可以使用不同的语言实现客户端和服务器端,知道它们都遵循我们上面的定义的消息交换规范。 XML 文档在客户服务器解耦过程中起了非常关键的作用,具体如下图所示:
Web 服务的解耦过程
发表评论
-
Highcharts使用指南
2013-08-29 10:49 1362摘要 Highcharts图表控件是目前使用最为广泛的图 ... -
【转】Flash图表AnyChart应用教程九:创建图表模板
2012-12-14 09:34 1257创建 AnyChart 模板的思路是分离图表设置和数据部分,然 ... -
【转】Flash图表AnyChart应用教程八:创建向下钻取仪表盘
2012-12-14 09:34 1253用 AnyChart 创建向下钻取地图有两种方式:用AnyCh ... -
【转】Flash图表AnyChart应用教程七:自定义轴标签
2012-12-14 09:33 1356AnyChart 图表中的X,Y和任意轴可以自定义标签。本文就 ... -
【转】Flash图表AnyChart应用教程六:创建圆形仪表
2012-12-14 09:33 2109本教程将为你详细解析 ... -
【转】Flash图表AnyChart应用教程五:字体设置
2012-12-13 10:11 1563要设置AnyChart 图表上的字体,可以对AnyChart的 ... -
【转】Flash图表AnyChart应用教程四:如何改变轴标签属性
2012-12-13 10:08 1479有人问到如何自定义AnyChart 图表的轴标签属性,实际上, ... -
【转】Flash图表AnyChart应用教程三:在网页中嵌入flash地图
2012-12-13 10:06 1871AnyChart 是一款灵活的基于Flash/JavaScri ... -
【转】Flash图表AnyChart应用教程二:修改XML设置转换图表类型
2012-12-13 10:02 1139我们都知道,运用flash图表控件 AnyChart 可以创建 ... -
【转】Flash图表AnyChart应用教程一:创建交互式数字仪表盘
2012-12-13 09:51 1685仪表盘是商业智能领域必不可少的一个工具,然而大多数企业仪表盘目 ... -
Table操作(自定义)
2010-03-22 08:26 1211<table id="ccc" cl ... -
日志级别的选择:Debug、Info、Warn、Error还是Fatal
2008-12-17 14:09 10822软件中总免 ... -
SSO(Single Sign on)-单点登录
2008-12-15 12:36 1880目前的企业应用 ... -
Web服务和SOA(一) 上
2008-11-15 23:06 1456翻译自<<Service Oriented Arc ... -
Web服务和SOA(二)
2008-11-18 23:44 1216SOA服务的基本实现方法—使用HTTP协议传输XML请求(PO ... -
Web服务和SOA(三) 上
2008-11-24 02:21 1068使用REST协议来实现SOA服务 REST是Represent ... -
Web服务和SOA(三) 下
2008-11-26 23:12 881至于deleteItem、findItemById和findA ... -
单点登录SSO
2008-12-15 10:23 1507摘要 :单点登录( SSO )的技术被越来越广泛地运用到各个领 ... -
应用整合中SSO的技术实现
2008-12-15 10:17 1812在税务行业信息化发展的关键阶段,应用整合已经非常重要,而应用整 ... -
Log4j的配置方法
2008-11-17 13:17 968Log4j的配置文件 虽然可以不用配置文件,而在程序 ...
相关推荐
总之,Java Web服务是构建SOA的关键技术,它提供了一种标准化、可扩展的方式来构建和整合分布式系统。通过深入理解JAX-WS、Spring框架以及相关的安全和管理机制,开发者可以有效地利用SOA来解决复杂的业务挑战。
SOA与Web服务SOA与Web服务SOA与Web服务SOA与Web服务
通过标准化的通信协议和服务接口,开发者可以构建出灵活、可扩展的系统,满足日益复杂和多样的业务需求。同时,服务的松散耦合确保了系统的稳定性,使得服务的升级和维护不影响消费者的使用体验。随着技术的不断发展...
使用Java Web服务构建SOA 中文版 part3
web服务与SOA架构的一些简单的关系和一些联系!
在SOA中,SOAP消息用于在服务提供者和服务消费者之间传递请求和响应。Java中,可以使用JAX-WS(Java API for XML Web Services)来创建和消费SOAP Web服务。 **3. WSDL(Web Service Description Language)** WSDL...
JAX-WS提供了一套工具和API,使得开发人员能够轻松地实现服务端点和服务客户端。 4. **JAXB(Java Architecture for XML Binding)**:JAXB是一个用于在Java对象和XML之间进行映射的标准API。它可以自动将Java对象...
( 用于实现Web服务的SOA编程模型.pdf )
使用Java Web服务构建SOA 中文版 part1
- **业务所有者**:希望通过 SOA 实现战略开发目标,例如增加新业务模型和服务等功能。 #### 技术要点 - **XML (Extensible Markup Language)**:一种用于标记数据的语言,是 Web 服务通信的基础。 - **SOAP ...
SOAP是一种基于XML的消息协议,它规定了消息的结构和交换规则,允许服务消费者和服务提供者之间进行安全、可靠的信息交换。例如,在清单2中展示的例子中,SOAP消息包含了一个信封,信封内封装了服务请求的具体内容,...
SOA是一种软件设计方法,它将应用程序的不同功能单元通过定义良好的接口和服务边界进行分离,以促进重用和互操作性。Java Web服务在SOA中扮演着关键角色,因为它们提供了标准的、平台无关的方式来暴露和消费这些服务...
Java Enterprise Edition(Java EE)提供了一系列API和服务,如JAX-WS(Java API for XML Web Services),用于创建和部署Web服务。Java的EJB(Enterprise JavaBeans)和JSF(JavaServer Faces)等技术则支持企业级...
- **SOA框架下的Web服务**:在SOA框架中,Web服务不仅仅是一个简单的服务提供者,更是整个体系结构中的一个重要组成部分,通过标准化的接口实现服务间的通信和交互。 #### 五、关键技术融合与面向服务的企业 - **...
本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...
面向服务架构(Service-Oriented Architecture,简称SOA)是一种重要的IT设计模式,它强调将软件功能分解为独立的服务,这些服务可以通过标准接口进行通信,从而实现松散耦合。SOA的核心理念是促进业务流程与IT系统...
【语义网Web服务SOA】是信息技术领域中...综上所述,语义网Web服务SOA是互联网技术发展的重要方向,它将推动信息处理和自动化服务的革命,使互联网从一个信息展示平台转变为一个能够理解、处理和执行任务的智能网络。
5. 服务总线(Service Bus):作为服务之间的通信基础设施,它处理消息路由、事务管理、安全性和服务质量控制等问题。 Web服务是SOA的一种实现形式,使用HTTP协议来交换数据,这使得Web服务能够跨越防火墙,广泛...
本研究旨在解决智能交通系统(ITS)中存在的问题,通过面向服务架构(SOA)和Web服务技术,提出了一种智能交通综合信息平台集成架构。该平台可以实现多个ITS系统之间的有机整合,对来自不同ITS数据源的数据进行采集...