Web服务复习要点(一)
webservice基础
软件即为服务
应用服务提供商:ASP
web服务可以调用其他的web服务。
web服务的定义
web服务是一个平台独立的、松耦合的、自包含的、基于可编程的Web应用程序,可使用开放的XML标准描述、发布、发现、协调和配置这些应用程序,并用于开发分布式的互操作应用程序。
web服务的特性
一、web服务的类型:
- 简单服务(信息型服务)
- 复合型服务
二、功能熟悉和非功能属性:
web服务可使用描述语言对服务进行描述。
- 功能性描述:详述了操作特性,定义了服务的整个行为
- 非:关于服务的质量属性,服务请求者的运行环境。
三、状态属性:
web服务可以是无状态的,也可以是有状态的。
- 无状态的:服务可以被重复调用,且无须维持上下文或者状态。
- 有状态的:需要维持上下文状态,维持不同操作调用之间的状态。
四、松耦合
服务请求者无须了解服务提供者实现的具体技术细节。
五、服务粒度
- 简单请求是细粒度的,通常不可再分。
- 复合服务通常是粗粒度的。
六、同步特性
同步或进程过程调用(RPC)方式
- 同步的客户端将请求表示为带变量的方法调用,方法返回一个包含返回值的响应。
- 当应用程序具有下列特性是,通常将用到RPC类型的Web服务:客户端需要一个立即的响应;客户端和服务以反复对话的方式进行协作。
异步或消息(文档)方式
- 是文档类型的服务或消息驱动类型的服务。
- 用到文档类型:客户端不需要立即的响应;服务是面向文档的。
七、良定义
服务间的交互是良定义的。
应用程序使用WSDL向其他的应用程序描述连接和交互的规则。
对于抽象服务接口以及支持服务的具体的协议绑定,WSDL提供描述的统一机制。
八、服务的使用环境
从web服务请求者的角度,可将信息服务划分为可代替的服务与关键任务服务。
服务的接口和实现
- 服务接口:定义了外部世界可以看到的服务功能,并提供了访问这些功能的方式。
- 服务实现:实现了具体的服务接口。对于用户来说,服务的实现细节是隐藏的。
组件:系统中一个独立封装的模块,具有明确定义的功能和作用范围。服务之间唯一的交互方式就是通过接口。服务接口和响应的实现组件有很大的互补性。
服务编配接口:
明确的描述组合服务客户端所期望的全部接口,以及那些组合到服务中的由环境所提供的接口。
服务的部署和服务的实现。
面向服务的体系结构(SOA)
SOA是一种设计软件的逻辑方法,可通过发布或发现接口向终端用户应用或网络上的其他服务提供服务。
SOA的目的:
- 使得已有的技术间具有通用的互操作性,并使得未来的应用和体系结构具有可扩展性。
- 使用面向服务的方式进行计算,增强了互操作性。
- 是一种设计理念,独立于任何具体的技术。
三个主要角色:
- 服务提供者:负责发布web服务
- 服务注册中心:一个可供搜索的目录,可在该目录中发布和搜索服务描述。
- 服务请求者:最终用户驱动的浏览器/另一个web服务
SOA中的操作(ppt p43):
- 发布服务描述(两个操作,描述和注册)
- 发现服务描述
- 基于服务描述绑定或调用服务
正确描述web服务需要三类基本信息:
- 业务信息:有关服务提供者或者服务实现的信息
- 服务信息:web服务的特征信息
- 技术信息:实现的细节及调用方法
查找操作:在发现机构的注册中心搜索服务
绑定操作:服务请求者使用绑定信息定位并联系服务,从而调用或者初始化一个运行时交互。
SOA中的层次
soa是一个灵活的体系结构,提供了一个集成框架。可以进行多对多的集成
六个层次:
- 业务领域
- 业务流程
- 业务服务
- 基础架构服务
- 服务实现
- 运营系统
web服务的技术架构
p56图
信息交换:SOAP,简单对象访问协议,基于XML的简单的消息协议。
服务描述:WSDL,webservice描述语言,描述了ws的功能特性
服务发布:UDDI,通用描述、发现与集成,使用UDDI可提供在线服务的发布。
分布式计算的基础架构
中间件
一种连接软件,在不同系统间建立桥接,以便在这些系统之间能够相互通信和传输数据,从而有助于管理分布式系统所固有的复杂性和异构性。
可以视为一个软件服务层。
位于应用程序和互联网传输协议之间。
两层:底层是进程间通行和串形化的基础架构,上一层蛀牙是关于进程间痛惜的机制,两种方式:基于消息的和不基于消息的。
客户/服务器模型
客户–请求–>客户端服务器–请求–>服务器
服务器–响应–>客户端服务器–响应–>客户端
分布式处理中,数据控制的集中化和数据访问的分布性之间是有冲突的,客户/服务器模式成为一个通用的解决方案。
客户端也是用户接口。
基于Web应用的客户端和传统的客户/服务器体系结构中客户端的区别:
”胖客户端“应用程序的大部分都存储在客户端。”瘦客户端“是在功能强大的服务器上运行程序。
进程间通信的特征
消息发送
程序间发送数据包进行相互的通信,所发送的数据包称作消息。消息是一个定义明确的饿、数据驱动的文本格式。
在交互的进程间所交换的消息由字节序列组成,数据结构必须是扁平的,需要采用一种特定的数据编组技术。
消息目的地和socket
进程间通信时,进程可能会使用多个端口接收消息。
进程通过套接字socket向网络上发送消息,接收消息。
中间件的同步方式
不基于消息方式:
- 远程过程调用(RPC)
- 远程方法调用(RMI)
RPC通信
实际上是一个成为客户桩的本地代理。客户桩是支持RPC的代理程序,模拟了远程对象和方法的接口。
适用于小型的简单应用。将许多重要的细节都交给编程人员处理。导致紧耦合的接口和应用。
远程方法调用
由两个不同的程序组成:服务器端和客户端
可以使用两种不同的类:远程类,串形化类。
中间件的异步方式
- 消息存储与转发
- 发布/订阅
消息的存储与转发:
通过存储与转发排队机制,发送程序可将消息发送到一个称为消息队列的虚拟信道中,接收程序可根据需要从消息队列中接收消息。
消息的发布/订阅:
可伸缩性稍大。发布者发布具体主题的消息到消息服务中枢,经过消息服务器,发布到订阅者的消息服务中枢供订阅者订阅。
事件的驱动处理机制
点到点排队
请求/应答的消息传送方式
p42,图
面向消息的中间件(MOM)
是一个基础架构,它使用普通的通信信道在应用之间传送数据。通常异步的发送和接收消息。
作用:传递信息,还包括其他服务,如数据转换,安全性。MOM与RPC和ORB不同,并不要求存在一个可靠的传输层。
MOM特性:
- 支持事件驱动处理的消息多播
- 消息的可靠性和串形化
- 将由网络理解和实现的物理名和地址抽象为主题文本名和属性
- 支持多种通信协议
- 支持事务分界
优点:
- 异构系统间的透明协作
- 请求的优先级
- 持久的消息发送
- 灵活性和可靠性
缺点:
可能会导致网络过载。
集成代理:
是一个应用之间的中间件服务,可进行一对多,多对一及多对多的消息分类。
XML概述
可扩展标记语言,标签没有被预定义,需要自行定义标签
设计宗旨:传输数据,与html不同,html是为了显示数据
1 | <note> |
XML的特点:
- 不作为的
- 仅仅是纯文本
- 通过XML可以发明自己的标签
- 独立于软件和硬件的传输工具
XML的作用:
- 把数据从HTML分离
- 简化数据共享
- 简化数据结构
- 简化平台的变更
- 使数据更有用
- 用于创建新的Internet语言
XML文档=命名容器+命名容器所包含的数据值
命名容器:
- 声明:确定XML的版本
- 元素:表示一个文本单元,可视为一个结构化组件
- 属性:元素的特性
一个XML文档也称为一个实例
开始部分:声明和注释
1 |
|
根元素,嵌套
XML树结构:
必须包含根元素,所有元素均可拥有文本内容和属性。
XML声明:
开头必须标记一个XML声明
xml语法规则
- 所有XML元素都拥有关闭标签
- 标签大小写敏感
- 必须正确嵌套
- 必须有根元素
- 属性值加引号
实体引用:大于小于等
统一资源标识符(URI)
是一串可以标识因特网资源的字符。最常用的URI是用来标识因特网域名地址的统一资源定位器(URL)。另一个是统一资源命名(URN)
XML命名空间使得不同的元素可以具有相同的本地名,从而避免了名字的冲突。
XML Namespace(xmlns)属性
被放置于元素的开始标签中。
用于标示命名空间的地址不会被解析器用于查找信息。其唯一的作用是赋予命名空间一个唯一的名称。
使用前缀来避免命名冲突。
定义XML文档中的结构
Schema:
- 模式是定义XML标签和XML结构的方式之一
- 模式具有很强的表达XML文档的能力
XML模式定义语言(XML Schema Definition Language,XSD)
- 提供了一种粒度化的方式,可用于描述XML文档的内容。
- 对于数据类型、定制和复用,XSD也提供了强大的功能。
下面这个例子是一个名为 “note.xsd” 的 XML Schema 文件。
1 |
|
对XML Schema的引用
1 |
|
这是带有属性的xml元素
1 | <lastname lang="EN">Smith</lastname> |
对对应的属性定义
1 | <xs:attribute name="lang" type="xs:string"/> |
XSD限定:
对值的限定
下面的例子定义了带有一个限定且名为 “age” 的元素。age 的值不能低于 0 或者高于 120:
1 | <xs:element name="age"> |
对一组值的限定
如需把 XML 元素的内容限制为一组可接受的值,我们要使用枚举约束(enumeration constraint)。
下面的例子定义了带有一个限定的名为 “car” 的元素。可接受的值只有:Audi, Golf, BMW:
1 | <xs:element name="car" type="carType"/> |
对一系列值的限定
如需把 XML 元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(pattern constraint)。
下面的例子定义了带有一个限定的名为 “letter” 的元素。可接受的值只有小写字母 a - z 其中的一个:
1 | <xs:element name="letter"> |
下一个例子定义了带有一个限定的名为 “initials” 的元素。可接受的值是大写字母 A - Z 其中的三个:
1 | <xs:element name="initials"> |
限定 | 描述 |
---|---|
enumeration | 定义可接受值的一个列表 |
fractionDigits | 定义所允许的最大的小数位数。必须大于等于0。 |
length | 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。 |
maxExclusive | 定义数值的上限。所允许的值必须小于此值。 |
maxInclusive | 定义数值的上限。所允许的值必须小于或等于此值。 |
maxLength | 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。 |
minExclusive | 定义数值的下限。所允许的值必需大于此值。 |
minInclusive | 定义数值的下限。所允许的值必需大于或等于此值。 |
minLength | 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。 |
pattern | 定义可接受的字符的精确序列。 |
totalDigits | 定义所允许的阿拉伯数字的精确位数。必须大于0。 |
whiteSpace | 定义空白字符(换行、回车、空格以及制表符)的处理方式。 |
#### 复合元素 | |
四种类型: | |
- 空元素 | |
- 包含其他元素的元素 | |
- 仅包含文本的元素 | |
- 包含元素和文本的元素 |
定义复合元素
请看这个复合 XML 元素,”employee”,仅包含其他元素:
1 | <employee> |
通过命名此元素,可直接对”employee”元素进行声明,就像这样:
1 | <xs:element name="employee"> |
其他具体不再描述,可以去W3C看教程。