??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲做受高潮,久久久久久久久久久久久女国产乱 ,亚洲天堂第二页http://www.aygfsteel.com/stevenjohn/category/51098.html那些青春的岁?/description>zh-cnThu, 24 May 2012 23:20:35 GMTThu, 24 May 2012 23:20:35 GMT60SOAP Webservice和RESTful Webservice http://www.aygfsteel.com/stevenjohn/archive/2012/05/24/379028.htmlabinabinThu, 24 May 2012 06:55:00 GMThttp://www.aygfsteel.com/stevenjohn/archive/2012/05/24/379028.htmlhttp://www.aygfsteel.com/stevenjohn/comments/379028.htmlhttp://www.aygfsteel.com/stevenjohn/archive/2012/05/24/379028.html#Feedback0http://www.aygfsteel.com/stevenjohn/comments/commentRss/379028.htmlhttp://www.aygfsteel.com/stevenjohn/services/trackbacks/379028.htmlREST是一U架构风|其核心是面向资源QREST专门针对|络应用设计和开发方式,以降低开发的复杂性,提高pȝ的可伸羃性。REST提出设计概念和准则ؓQ?/p>

1.|络上的所有事物都可以被抽象ؓ资源(resource)

2.每一个资源都有唯一的资源标?resource identifier)Q对资源的操作不会改变这些标?/p>

3.所有的操作都是无状态的

REST化开发,其架构遵循CRUD原则Q该原则告诉我们对于资源(包括|络资源)只需要四U行为:创徏Q获取,更新和删除就可以完成相关的操作和处理。您可以通过l一资源标识W(Universal Resource IdentifierQURIQ来识别和定位资源,q且针对q些资源而执行的操作是通过 HTTP 规范定义的。其核心操作只有GET,PUT,POST,DELETE?/p>

׃REST强制所有的操作都必Lstateless的,q就没有上下文的U束Q如果做分布式,集群都不需要考虑上下文和会话保持的问题。极大的提高pȝ的可伸羃性?/p>

对于SOAP Webservice和Restful Webservice的选择问题Q首先需要理解就是SOAP偏向于面向活动,有严格的规范和标准,包括安全Q事务等各个斚w的内容,同时SOAP操作Ҏ和操作对象的分离Q有WSDL文g规范和XSD文g分别对其定义。而REST面向资源Q只要我们要操作的对象可以抽象ؓ资源卛_以用REST架构风格?/p>

如果从这个意义上Ԍ是否使用REST需要考虑资源本n的抽象和识别是否困难Q如果本w就是简单的cM增删Ҏ的业务操作,那么抽象资源比较容易,而对于复杂的业务zd抽象资源q不是一个简单的事情。比如校验用LU,转̎Q事务处理等Q这些往往q不Ҏ单的抽象源?/p>

其次如果有严格的规范和标准定义要求,而且前期规范标准需要指导多个业务系l集成和开发的时候,SOAP风格׃有清晰的规范标准定义是明显有优势的。我们可以在开始和实现之前׃格定义相关的接口Ҏ和接口传输数据?/p>

单数据操作,无事务处理,开发和调用单这些是使用REST架构风格的优ѝ而对于较为复杂的面向zd的服务,如果我们q是使用RESTQ很多时候都是仍然是传统的面向活动的思想通过转换工具再{换得到REST服务Q这U用方式是没有意义的?/p>

正如另外一文章里面谈到的QREST核心是url和面向资源,url代替了原来复杂的操作Ҏ。REST允许我们通过url设计pȝQ就像测试驱动开发用测试用例设计类接口一栗所有可以被抽象源的东西都可以用RESTful的urlQ当我们以传l的用SOAP方式实现的一个查询订单服务的时候可以看刎ͼq个服务首先存在输入的查询条Ӟ然后才是输出l果集。那么对于类似场景要使用RESTQ不可避免的会将传统的SOAP服务拆分Z个HTTP POST操作和一个HTTP GET操作。前面是输入Q而后面是输出?/p>

使用REST的关键是如何抽象资源Q抽象的精,对REST的应用越好。如何进行抽象,面向资源的设计和传统的面向结构和对象设计区别Q资源和对象Q数据库表之间的差别是另外一个在分析设计时候要考虑的问题。在REST分析设计中如何改变传l的SOAP分析设计思想又是一个重要问题?/p>

下文转蝲自:http://hi.baidu.com/gaohong230/blog/item/cd3924396bc7332fb9998f52.html

在SOA的基技术实现方式中WebService占据了很重要的地位,通常我们提到WebServiceW一x是SOAP消息在各U传输协议上交互。近几年REST的思想伴随着SOA逐渐被大家接受,同时各大|站不断开放API提供l开发者,也激起了REST风格WebService的热潮?/p>

SOAP

什么是SOAPQ我想不用多_google一把满眼都是。其实SOAP最早是针对RPC的一U解x案,单对象访问协议,很轻量,同时作ؓ应用协议可以Z多种传输协议来传递消息(Http,SMTP{)。但是随着SOAP作ؓWebService的广泛应用,不断地增加附加的内容Q得现在开发h员觉得SOAP很重Q用门槛很高。在SOAP后箋的发展过E中QWS-*一pd协议的制定,增加了SOAP的成熟度Q也lSOAP增加了负担?/p>

REST

REST其实q不是什么协议也不是什么标准,而是Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天Q越来越多的是将其作Z输协议,而非原先设计者所考虑的应用协议。SOAPcd的WebService是最好的例子QSOAP消息完全是Http协议作ؓ消息承蝲Q以至于对于Http协议中的各种参数Q例如编码,错误码等Q都|之不顾。其实,最轻量U的应用协议是Http协议。Http协议所抽象的get,post,put,delete好比数据库中最基本的增删改查,而互联网上的各种资源好比数据库中的记录Q可能这么比M是很好)Q对于各U资源的操作最后L能抽象成四种基本操作Q在定义了定位资源的规则以后Q对于资源的操作通过标准的Http协议可以实玎ͼ开发者也会受益于q种轻量U的协议?/p>

REST的思想归结以下有如下几个关键点Q?/p>

1Q面向资源的接口设计

所有的接口设计都是针对资源来设计的Q也很cM于我们的面向对象和面向过E的设计区别Q只不过现在网l上的操作实体都作ؓ资源来看待,同时URI的设计也是体C对于资源的定位设计。后面会提到有一些网站的API设计说是REST设计Q其实是RPC-REST的؜合体Qƈ非是REST的思想?/p>

2Q抽象操作ؓ基础的CRUD

q点很简单,Http中的get,put,post,delete分别对应了read,update,create,delete四种操作Q如果仅仅是作ؓ对于资源的操作,抽象成ؓq四U已l够了Q但是对于现在的一些复杂的业务服务接口设计Q可能这L抽象未必能够满。其实这也在后面的几个网站的API设计中暴露了q样的问题,如果要完全按照REST的思想来设计,那么适用的环境将会有限制Q而非放之四v皆准的?

3QHttp是应用协议而非传输协议

q点在后面各大网站的API分析中有很明昄体现Q其实有些网站已l走CSOAP的老\上,说是REST的理念设计,其实是作了一套私有的SOAP协议Q因此称之ؓREST风格的自定义SOAP协议?/p>

4Q无状态,自包?/strong>

q点其实不仅仅是对于REST来说的,作ؓ接口设计都需要能够做到这点,也是作ؓ可扩展和高效性的最基本的保证,q是用SOAP的WebService也是一栗?/p>

SOAP Webservice和RESTful Webservice的比?/p>

成熟?ȝ来说SOAP在成熟度上优于REST)

SOAP虽然发展到现在已l脱M初衷Q但是对于异构环境服务发布和调用Q以及厂商的支持都已l达C较ؓ成熟的情c不同^収ͼ开发语a之间通过SOAP来交互的web service都能够较好的互通(在部分复杂和Ҏ的参数和q回对象解析上,协议没有作很l致的规定,Dq是需要作部分修正Q?/p>

REST国外很多大网站都发布了自q开发APIQ很多都提供了SOAP和REST两种Web ServiceQ根据调查部分网站的REST风格的用情况要高于SOAP。但是由于REST只是一U基于Http协议实现资源操作的思想Q因此各个网站的REST实现都自有一套,在后面会讲诉各个大网站的REST API的风根{也正是因ؓq种各自实现的情况,在性能和可用性上会大大高于SOAP发布的web serviceQ但l一通用斚wq远不及SOAP。由于这些大|站的SP往往专注于此|站的API开发,因此通用性要求不高?/p>

׃没有cM于SOAP的权威性协议作范,REST实现的各U协议仅仅只能算是私有协议,当然需要遵循REST的思想Q但是这L节方面有太多没有U束的地斏VREST日后的发展所走向规范也会直接影响到这部分的设计是否能够有很好的生命力?/p>

效率和易用?REST更胜一{?

SOAP协议对于消息体和消息头都有定义,同时消息头的可扩展性ؓ各种互联|的标准提供了扩展的基础QWS-*pd是较ؓ成功的规范。但是也׃SOAP׃各种需求不断扩充其本n协议的内容,D在SOAP处理斚w的性能有所下降。同时在易用性方面以及学习成本上也有所增加?/p>

REST被h们的重视Q其实很大一斚w也是因ؓ光效以及简z易用的Ҏ。这U高效一斚w源于光向资源接口设计以及操作抽象简化了开发者的不良设计Q同时也最大限度的利用了Http最初的应用协议设计理念。同Ӟ在我看来RESTq有一个很吸引开发者的是能够很好的融合当前Web2.0的很多前端技术来提高开发效率。例如很多大型网站开攄REST风格的API都会有多U返回Ş式,除了传统的xml作ؓ数据承蝲Q还有(JSON,RSS,ATOMQ等形式Q这对很多网站前端开发h员来说就能够很好的mashup各种资源信息?/p>

安全性:

q点其实可以攑օ到成熟度中,不过在当前的互联|应用和q_开发设计过E中Q安全已l被提到了很高的高度Q特别是作ؓ外部接口l第三方调用Q安全性可能会高过业务逻辑本n?/p>

SOAP在安全方面是通过使用XML-Security和XML-Signature两个规范l成了WS-Security来实现安全控制的Q当前已l得C各个厂商的支持,.net Qphp Qjava 都已l对其有了很好的支持Q虽然在一些细节上q是有不兼容的问题,但是互通基本上是可以的Q?/p>

REST没有M规范对于安全斚w作说明,同时现在开放REST风格API的网站主要分成两U,一U是自定义了安全信息装在消息中Q其实这和SOAP没有什么区别)Q另外一U就是靠gSSL来保?但是q只能够保证点到点的安全Q如果是需要多点传输的话SSL无能ؓ力了。安全这块其实也是一个很大的问题Q今q在BEAC上看到有演示采用SAML2实现的网站间SSOQ其实是直接采用了XML-Security和XML-SignatureQ效率看h也不是很高。未来REST规范化和通用化过E中的安全是否也会采用这两种规范Q是未知的,但是加入的越多,REST失去它高效性的优势多?/p>

应用设计与改造:

我们的系l要么就是已l有了那些需要被发布出去的服务,要么是刚刚设计好的服务Q但是开发h员的传统设计思想让REST的Ş式被接受q需要一Ҏ间。同时在资源型数据服务接口设计上来说按照REST的思想来设计相Ҏ说要Ҏ一些,而对于一些复杂的服务接口来说Q可能强要去按照REST的风格来设计会有些牵强。这一点其实可以看看各大网站的接口可以知道,很多|站q要传入function的名UC为参敎ͼq就明显已经q背了REST本n的设计思\。而SOAP本n是面向RPC来设计的Q开发h员十分容易接受,所以不存在什么适应的过E。ȝ来说Q其实还是一个老观念,适合的才是最好的

技术没有好坏,只有是不是合适,一U好的技术和思想被误用了Q那么就会得到反效果。REST和SOAP各自都有自己的优点,同时如果在一些场景下如果L造RESTQ其实就会走向SOAPQ例如安全)?/p>

REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高Q但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语a的,对于安全性要求较高的接口设计带来便利。所以我觉得Ua说什么设计模式将会占据主导地位没有什么意义,关键q是看应用场景?/p>

同时很重要一点就是不要扭曲了REST现在很多|站都跟风去开发REST风格的接口,其实都是在学其ŞQ不知其心,最后弄得不伦不c,性能上不去,安全又保证不了,徒有一个看D摸象L皮囊?/p>

abin 2012-05-24 14:55 发表评论
]]>
վ֩ģ壺 Ӣɳ| ζ| | | ̶| | | | Ϫ| ½| ƫ| | ߰| | | | | | IJ| | | | | | ˶| | | â| | ʯɽ| | ʡ| ɼ| | Ͳ| ƽ| | Ͼ| | | ˳|