• [WS]Web服务系列(二) Web服务的结构


    我发现写日志可以帮助自己整理思路,有些技术在一段时间不用后,如果以日志的形式写出来,对于巩固记忆是十分有效的。比如这个Web服务系列,为了尽量避免错误,我会重新查阅资料,在这个过程中又能学到新的知识。不过,Web服务涉及的面太广了,而且新技术出现那么快,即使全部时间都用来研究它也不可能面面俱到,就像一本很厚很厚的书,经常翻翻反而会有意想不到的收获。

    上一篇帖子里已经说过Web服务是做什么用的了,在这一篇里要说说Web服务的结构,也就是Web服务的协议栈。协议是各角色间用来沟通的基础,之所以称为栈,是由于这些协议是一层层垒起来的,下面一层是上面一层的基础。就像OSI的七层网络协议的关系。

    现在要向你介绍一些概念了,它们是:XML、SOAP、WSDL、UDDI和BPEL4WS。对于XML相信大家都不会陌生,它是可扩展标记语言(eXtensible Markup Language)的缩写,是Web服务各种协议的基础;SOAP是简单对象访问协议(Simple Object Access Protocal)的缩写,它主要用于在服务提供者和使用者之间传送各种请求和应答数据;WSDL代表Web服务定义语言(Web Services Description Language),服务提供者使用这种语言发布自己的Web服务,供潜在的服务使用者使用;UDDI的意思是统一描述发现和集成(Universal Description, Discovery and Integration),UDDI项目由UDDI社区维护,服务提供者可以将自己的服务注册到UDDI服务器中,服务使用者可以在服务器中浏览和查询所需服务;BPEL4WS的意思是用于Web服务的业务流程执行语言(Business Process Execution Language for Web Services),它可以将多个Web服务组装成完整的业务流程,体现了Web服务的真正强大之处(组装)。

    只这么简单一说,你可能对其中有些概念并不明白,不过没有关系,在以后的帖子里会对每个概念展开来说明。还要说明一点,列出的这些概念是实际构造和使用Web服务时使用最为广泛的技术,但Web服务并不一定必须使用这些,除XML外,其他技术都有替代品,只是并不那么流行而已。下面我们就来看看Web服务的协议栈是个什么样子的吧,如图所示。



    图1 Web服务协议栈

    最底层是服务传输层,在图中可以看到Web服务可以使用多种(OSI应用层)网络协议进行消息传递,HTTP是使用最为广泛的,因为HTTP的请求应答模式十分符合RPC类型调用,SMTP主要用于异步方式的调用,例如订阅信息等等。

    服务消息层的协议定义了消息的格式,在这一层里几乎全部是以SOAP为协议的,至少我还没见过使用其他协议的例子。SOAP的基础是XML,也就是说,SOAP消息一定都是XML格式的。

    服务描述层的协议用于对如何使用这个Web服务进行描述,描述信息一般包括使用到的数据类型、消息格式、方法名称和参数(在WSDL里的称呼有所不同)等等。WSDL也是以XML为基础的。

    服务发布和发现层协议是供注册中心这个角色使用的,UDDI是目前使用最广泛的注册中心,图中其他几种方式也有应用。

    服务组装层用于组装Web服务成为新的服务,这些被组装起来的服务一般体现了一定的业务流程。其好处是各服务间耦合很小,改变起来十分容易。在这一层里,目前有不少协议正在竞争,BPEL4WS可以说具有一定的优势吧。

    待开发的协议与我们比较小,暂时不说了。图中右边三个纵向协议贯穿整个Web服务生命周期,它们是服务管理、服务质量和服务安全。因为将来很多的Web服务是要收费才可以使用的,和钱挂钩的东西就必须能够管理、保证质量和安全才行。一直以来,它们都是Web服务研究的难点(因为涉及到太多方面的利益),目前在功能方面Web服务已经做好了准备,如果能够攻破这些非功能性的难题,我想Web服务距离大规模应用就不远了。

    图1是比较常见的一种协议栈图,实际上由于Web服务的使用方式多种多样,协议栈图也未必相同。例如w3.org上的是这样,它把XML也技术表现在图上,体现了其在Web服务中的基础地位。

    总结一下Web服务的关键技术:XML、SOAP、WSDL、UDDI和BPEL4WS。

    如果觉得这一篇有点抽象,那很正常,因为出现了新的概念。另外,我自己对Web服务的理解也是来源与书本,项目经验不足,缺少对这个行业的宏观认识,所以在写出来的时候都要斟酌一二,拿不准的尽量不写。没关系,下面几篇讲的是具体技术,可以醒醒了:)

  • 相关阅读:
    Redis命令——小白学习 Redis 数据库日记(2017-06-13)
    Buses(形容城市公车交通情况)
    Things you need to prepare before going to airport
    bathroom words
    this指针
    友元
    成员对象和封闭类
    静态成员变量和静态成员函数、 常量对象和常量成员函数
    C++类
    shell选择语句、循环语句
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/30402.html
Copyright © 2020-2023  润新知