`
FengShen_Xia
  • 浏览: 279360 次
  • 性别: Icon_minigender_1
  • 来自: 东方水城
社区版块
存档分类
最新评论

Web服务和SOA(一) 下

    博客分类:
  • Web
阅读更多

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>
    
<id>137</id>
</ItemId>

=> findItemById =>

<Item>

<id>137</id>

<code> RX004 </code>

<description>   Eth. Cable 4 ft. </description>

</Item>

 

  修改 

服务输入

服务名

服务输出

<ItemId>
      
<id>137</id>
</ItemId>

=> findItemById =>

<Item>

  <id>137</id>

<code> RX004 </code>

<description>   Eth. Cable 4 ft. </description>

</Item>

 

  删除

服务输入

服务名

服务输出

<ItemId>
  <id>137</id>
</ItemId>

=> deleteItem =>

<Result>
<retCode> OK </retCode>
<id>0</id>
</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 服务的解耦过程
 
 

分享到:
评论

相关推荐

    使用Java Web服务构建SOA

    总之,Java Web服务是构建SOA的关键技术,它提供了一种标准化、可扩展的方式来构建和整合分布式系统。通过深入理解JAX-WS、Spring框架以及相关的安全和管理机制,开发者可以有效地利用SOA来解决复杂的业务挑战。

    SOA与Web服务SOA与Web服务

    SOA与Web服务SOA与Web服务SOA与Web服务SOA与Web服务

    认识Web2.0下的Web服务和SOA

    通过标准化的通信协议和服务接口,开发者可以构建出灵活、可扩展的系统,满足日益复杂和多样的业务需求。同时,服务的松散耦合确保了系统的稳定性,使得服务的升级和维护不影响消费者的使用体验。随着技术的不断发展...

    使用Java Web服务构建SOA 中文版 part3

    使用Java Web服务构建SOA 中文版 part3

    web服务与SOA架构

    web服务与SOA架构的一些简单的关系和一些联系!

    用于实现Web服务的SOA编程模型.

    在SOA中,SOAP消息用于在服务提供者和服务消费者之间传递请求和响应。Java中,可以使用JAX-WS(Java API for XML Web Services)来创建和消费SOAP Web服务。 **3. WSDL(Web Service Description Language)** WSDL...

    使用Java Web服务构建SOA源代码

    JAX-WS提供了一套工具和API,使得开发人员能够轻松地实现服务端点和服务客户端。 4. **JAXB(Java Architecture for XML Binding)**:JAXB是一个用于在Java对象和XML之间进行映射的标准API。它可以自动将Java对象...

    用于实现Web服务的SOA编程模型

    ( 用于实现Web服务的SOA编程模型.pdf )

    使用Java Web服务构建SOA 中文版 part1

    使用Java Web服务构建SOA 中文版 part1

    SOA, Web Services

    - **业务所有者**:希望通过 SOA 实现战略开发目标,例如增加新业务模型和服务等功能。 #### 技术要点 - **XML (Extensible Markup Language)**:一种用于标记数据的语言,是 Web 服务通信的基础。 - **SOAP ...

    XML与Web服务和SOA有何关联.docx

    SOAP是一种基于XML的消息协议,它规定了消息的结构和交换规则,允许服务消费者和服务提供者之间进行安全、可靠的信息交换。例如,在清单2中展示的例子中,SOAP消息包含了一个信封,信封内封装了服务请求的具体内容,...

    使用Java Web服务构建SOA pdf 电子书

    SOA是一种软件设计方法,它将应用程序的不同功能单元通过定义良好的接口和服务边界进行分离,以促进重用和互操作性。Java Web服务在SOA中扮演着关键角色,因为它们提供了标准的、平台无关的方式来暴露和消费这些服务...

    soa.rar_SOA_java soa _web services in soa

    Java Enterprise Edition(Java EE)提供了一系列API和服务,如JAX-WS(Java API for XML Web Services),用于创建和部署Web服务。Java的EJB(Enterprise JavaBeans)和JSF(JavaServer Faces)等技术则支持企业级...

    《Understanding SOA with Web Services中文版》webservice.

    - **SOA框架下的Web服务**:在SOA框架中,Web服务不仅仅是一个简单的服务提供者,更是整个体系结构中的一个重要组成部分,通过标准化的接口实现服务间的通信和交互。 #### 五、关键技术融合与面向服务的企业 - **...

    使用Java Web服务构建SOA.part3

    本书是一本方便的开发指南,可以帮助你在当前Java EE5和Java SE6平台上实现Web服务和面向服务的架构(SOA),介绍了如何创建、部署、以及调用Web服力,再将这些服务组合成松散耦合的SOA应用程序,并介绍了一个精心...

    SOA:下一代Web服务的技术架构

    面向服务架构(Service-Oriented Architecture,简称SOA)是一种重要的IT设计模式,它强调将软件功能分解为独立的服务,这些服务可以通过标准接口进行通信,从而实现松散耦合。SOA的核心理念是促进业务流程与IT系统...

    语义网Web服务SOA

    【语义网Web服务SOA】是信息技术领域中...综上所述,语义网Web服务SOA是互联网技术发展的重要方向,它将推动信息处理和自动化服务的革命,使互联网从一个信息展示平台转变为一个能够理解、处理和执行任务的智能网络。

    面向服务架构SOA与web资料源码

    5. 服务总线(Service Bus):作为服务之间的通信基础设施,它处理消息路由、事务管理、安全性和服务质量控制等问题。 Web服务是SOA的一种实现形式,使用HTTP协议来交换数据,这使得Web服务能够跨越防火墙,广泛...

    基于SOA和Web服务的智能交通综合信息平台研究

    本研究旨在解决智能交通系统(ITS)中存在的问题,通过面向服务架构(SOA)和Web服务技术,提出了一种智能交通综合信息平台集成架构。该平台可以实现多个ITS系统之间的有机整合,对来自不同ITS数据源的数据进行采集...

Global site tag (gtag.js) - Google Analytics