版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-.zWebservice的设计和模式本系列文章导航创立一个例如和WebMethod特性解析WebService特性和数组类型解析类和构造体解析利用公开API做天气预报Web效劳Webservice的设计和模式Remoting和Webservice的区别本文转自:.blogs./idior/〔收藏看着不方便,还是放在自己的园子里〕本文是篇译文〔原文在dev*〕,对于想初步了解webservice的朋友可能有些帮助。
Webservice作为一项新的技术出现在我们面前,它的出世是用于解决在不同的平台下的应用的协同的。目前几乎每家厂商都要去开发Webservice应用,然而如果缺乏对Webservice更深的了解,不能很好的在设计阶段处理好一些重要的问题,则最终完成的系统必然是效率低下,没有可靠性的产品。在设计Webservice应用时,以下几点务必要考虑到:l
管理好与外系统的协同关系l
掌握底层的传输模型l
提供与应用相适应的平安策略l
方案好部署的相关事项以下,将就这几条相关的设计需求和一些常用模式是如何应用于Webservice模型展开详细讨论。在讨论中,你会发现Webservice这项新的技术是如何与我们在以往的软件开发相结合的。l
标准提供了协同的能力Webservice的一个最根本的目的就是提供在各个不同平台的不同应用系统的协同工作能力。为了使得一个公司的网络应用到达最高的效率,存在它自己和它的合作伙伴,供给商以及客户之间的Webservice,应该能够实现无缝的交互。如果在众多的Webservice之间不能轻松的实现交互,则该应用的效率将大打折扣。但是,在现实中这种情况是极有可能出现的。由于各个公司对业务的理解各不一样,就是理解一样的情况下,对于一样的概念也可能用不同的形式加以表现,具体而言就是对于同一数据可能采取不同的*ml表示。由于以上的原因,对于协同性的问题应该在设计应用架构时就加以考虑,而不是留待以后去改变。Webservice主要由以下几块技术所构成,SOAP(SimpleObjectAccessProtocol),WSDL(WebserviceDescriptionLanguage),以及UDDI(UniversalDescription,DiscoveryandIntegration)。在这里我们不会去详细研究这些技术,而是提醒他们的一些重要特性,这些特性需要在Webservice的设计时详加考虑。WSDL是实现协同能力的关键,它提供了一份契约用于与新老的应用之间交互。这项技术使得各个组织可以将标准的制定集中在Service的外部接口,而不用考虑各组织的具体实现。简而言之,它实现了Webservice的接口与实现的别离。从而使得标准的制定,更加容易。并且,基于这份接口描述,很多工具可以从中自动生成客户端代码,减少了开发者的工作量,并使得大局部开发者摆脱了编写SOAP消息传递代码过程。SOAP是实现在各个Webservice组件之间传递消息的传输层。因此,SOAP应该是一项透明的协同技术。但是,由于很多的SOAP实现方法却与标准背道而驰,要么添加了新的扩展功能要么删减了一些标准功能。由于对SOAP标准的支持程度不同,使得Webservice的协同能力大打折扣,实现协同的困难加大了。基于这种情况,当开发者需要Webservice运行在不同平台上时,就要对具体情况加以了解并相应的编码以解决这种不一致性。如果所有的SOAP实现组织都能够遵循标准的话,则Webservice的开发者就不需要考虑使用该Webservice的底层平台了。尽管如此,不同SOAP实现的协同还是相当困难,因为协同标准的制定存在大量的分歧,目前一些组织正致力于标准的制定,比方SOAPBuilders和WS-I。然而,现在Webservice开发者只有针对不同平台,给予不同的实现,使得开发的本钱和负担加大了。l
理解传输模型SOAP并不是完全透明的解决方案,它把一些复杂的实现细节隐藏起来。Webservice的开发者必须深入的了解SOAP,了解底层的传输机制以及模型,从而知道SOAP是如何实现的。在一些简单的应用中,*些工具可以帮助Webservice的开发者生成SOAP消息传递的代码,但是这只在最简单的应用中有效。真正的情况不可能则简单,可能在*些方面你需要有特殊的处理〔这种情况在实际开发中是很常见的〕,这个时候,你就需要直接操纵SOAP的消息传递代码,以及一些底层的*ML内容。因此,Webservice的开发者需要深入了解SOAP和*ML层的内容。在开发Webservice的接口的时候,不要以为使用*ML技术,协作性的问题就迎刃而解了,*ML并不是解决集成问题的灵丹妙药。这里同样需要标准的制定,需要一个在业界公认的词汇表。仅仅在你的设计框架中引入*ML技术并不能保证系统具有协同性,*ML仅仅是用来描述数据的语言,*ML自己并不提供语义去理解数据。就如同英语和德语都使用拉丁字母,但是他们的语义却并不一样。即使你使用一样的语言,也不能保证具有良好的协作性。比方你的公司可能使用Order描述一个订单,但你的合作伙伴可能使用Purchase_Order,而另一个伙伴可能又不一样。你不可能强迫你所有的合作伙伴都采用和你一样的词汇。因此需要有一项技术可以在众多的描述之间充当翻译的角色。*SLT就是这么一种技术,它用于不同语言的转换。和*SLT的配合使用*ML才能解决协同性的问题。l
DOMvs.SA*许多的Webservice开发环境,将开发者从底层的*ML文档的解析和处理中解放出来,他们提供了自动化或者很方便的工具,使得这一过程变得很简单。但是对于一些有特殊要求的Webservice应用,比方需要更好的柔性或者对速度要求特别高的应用,就需要手工处理*ML文档。这时候两种*ML解析的模型-DOM和SA*的选择,将成为重要的问题。DOM使用树状图的方式解析*ML文档,而SA*则更多的采用事件驱动的模型。DOM先将*ML文档映射成一颗树,然后通过采用一系列与树相关的操作去处理这份文档。这种方法有很多的好处,首先开发者很容易理解,使用一颗树这对于开发者来说是最常见不过的了。DOM最常用于*ML在Service中需要频繁修改的场合。当然DOM也有它的缺点,在处理*ML文档的时候,它需要载入整个文档,而不管你需要修改的是否只是其中的一小局部。因此它的运行效率以及对内存的使用显然是不能承受的,尤其是面对很大的*ML文档。SA*使用事件驱动的模型来处理*ML文档。通过一系列事件的触发,来完成对*ML的解析,你可以只关心你所要处理的事件,当这些事件发生时,会调用到相应的回调函数来通知到你。采用这种方式就可以在很大程度上提高*ML文档解析的效率。但是它的缺点在于难于使用,以及对同一文档的屡次处理会存在一些问题。总而言之,DOM更适合处理那种文档型的*ML文件,而SA*则适于那种想直接将*ML构造映射成在你系统中的一个对象的操作。〔比方将一个*ML构造直接映射成JAVA中的一个Class〕或者那种针对*ML文件中特殊Tag的操作。l
文档交换vs.RPC模型这两种交互方式应该在应用架构的设计初始就应该详加考虑,因为它将在很大程度上决定系统的耦合程度。RPC〔RemoteProcedureCall〕本质上就是远程方法的调用。尽管Webservice是基于*ML的但是你仍然可以使用远程方法调用这种模式来进展Webservice的实现,尤其是在那种简单的请求相应的模型中。在这个过程中,传输中的*ML文件所描述的更多是有关远程方法的信息,比方方法名,方法参数等等。而文档交换方式,与RPC相比拟在*ML文件中不是做远程方法的映射,而是一份完整的自包含的业务文档,当Service端收到这份文档后,先进展预处理〔比方词汇的翻译和映射〕,然后再构造出返回消息。这个构造返回消息的过程中,往往不再是简简单单的一个方法调用,而是多个对象协同完成一个事务的处理,再将结果返回。这两种方式的区别,类似与打和发的不同处理方法。在目前,对于第一种方法提供了很多自动化的工具使得远程方法的调用能够很容易的完成,而后一种方法缺少一系列工具的支持,需要开发者手工完成。尽管如此,在此还是推荐使用文档交换的方式。由于它在以下方面具有RPC所不具备的优点。使用文档方式,你可以充分利用*ML文件的功能去描述和验证一份业务文档,而在RPC模型中*ML仅仅被用于描述方法的信息。使用文档方式,在客户的Service的提供者之间不再需要严密的约定,而RPC模型需要客户和Service的提供者严密相连,一旦方法发生变化,客户端就需要做相应的改动。这不符合低耦合系统的要求,而在文档交换方式中则灵活的多。由于业务数据是自包含的,显然文档模型更利于采用异步处理。
利用设计模式设计模式在设计Webservice的时候显然可以起到相当大的作用。设计模式的主要目的就是为解决*些在类似环境下的相像问题提供已有的较为成熟的设计方案。在这里,只简单的提及一些很常用的模式,让我们了解到模式在Webservice中可以起到的作用。Adapter:为内部系统提供一个不同的接口Façade:封装复杂的内部实现,提供一系列简单的接口Pro*y:作为其他对象的代理,代替它提供效劳Adapter模式用于将一个组件的接口转化成客户所需要的样子,这里的客户就是Webservice。一个常见的情况就是将原有的老的系统包装成一个Webservice。比方现在使用的是J2EE的平台,而原来有一个C++的系统实现了*些功能,现在需要将它发布成Webservice,则就需要利用JNI技术做一个Adapter,为原来的C++组件提供一个Java的接口,然后再转化为Webservice。Façade模式用于构建粗粒度的效劳,它包装了细粒度的效劳,从而为复杂的系统提供了一个简单的接口。在J2EE中,SessionBean就象是一个Façade,而EntityBean则是细粒度的效劳。在Webservice中也一样,使用Façade模式可以将已有的组件的功能发挥殆尽。Pro*y模式用于充当其他对象的代理,类似于中间人的作用,将处理工作从一个对象传递到另一个对象。在Webservice中,它主要用于隐藏Soap消息构造的过程。也可以用于模拟对象〔MockObject〕的创立。以上仅仅是一些可以用于Webservice开发的模式,如果你熟练的将这些模式应用于Webservice开发,你将会发现开发Webservice应用,将好似做一种特殊的面向对象设计。l
平安Webservice为作为方便的效劳被用广阔领域使用的同时,也成为了黑客们的美食。在这里,本文将就目前对Webservice平安所能做的改良做简单介绍。在Webservice中的平安主要分为以下三个方面。传输
SSL/HTTPS对连接加密,而不是传输数据消息
数据加密(*MLEncryption)
数字签名(*ML-DSIG)底层架构
利用应用效劳平安机制传输时的平安是最容易被参加到你的Webservice应用中的,利用现有的SSL和HTTPS协议,就可以很容易的获得连接过程中的平安。然而这种平安实现方法有两个弱点。一是它只能保证数据传输的平安,而不是数据本身的平安,数据一旦到达*地,则就可以被任何人所查看。而在Webservice中,一份数据可能到达多个地方,而这份数据却不该被所有的承受者所查看。二是它提供的是要么全有要么全无的保护,你不能选择哪局部数据要被保护,而这种可选择性也是在Webservice中所常要用到的。第二层的保护是对于消息本身的保护。你可以使用已有的*ML平安扩展标准,实现数字签名的功能,从而保证你的消息是来自特定方并没有被修改正。*ML文件的加密技术从更大程度上加强了Webservice的平安,它能够定制数据传输到后,能否被承受者所查看,进一步完善了传输后的平安,业界也在不断的制定Webservice的平安标准,比方SAM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 记账实操-实际缴纳企业所得税的账务处理实例分录 SOP
- 合规转利润:降本增效全指南(2026)《GBT 36439-2018无损检测 航空无损检测人员资格鉴定与认证》
- 合规转利润:降本增效全指南(2026)《GBT 36022-2018木家具中氨释放量试验方法》
- 《轴对称》的课堂实录
- 植物原料制取工创新意识评优考核试卷含答案
- 盲文印刷员安全知识竞赛评优考核试卷含答案
- 有害生物防制员安全教育评优考核试卷含答案
- 膜剂工安全综合竞赛考核试卷含答案
- 图案打样工操作安全竞赛考核试卷含答案
- 印泥制作工岗前生产安全效果考核试卷含答案
- 《新能源汽车动力电池及管理系统检修》全套教学课件
- 1.2图幅线型字体及尺寸标注acA4A3A2A1A0-1.2.1图幅图标及会签
- 【国网-变电运维】刀闸控制回路及五防(统一格式版本)
- 新高考物理一轮复习分层提升练习专题19 板块模型(原卷版)
- 学校食堂餐饮服务投标方案(技术方案)
- 翻译人员派遣协议范本
- GB/T 7744-2023工业氢氟酸
- 企业网络安全建设PPT完整全套教学课件
- 老年人辅助器具应用高职PPT完整全套教学课件
- 消费者行为学之自我概念与生活方式概述
- 把未来点亮歌词打印版
评论
0/150
提交评论