| )SOAP
SOAP,全名是Simple Object Access Protocol,是Microsoft提交给W3C的Web Service协议。我觉得SOAP的两个最大的好处是:
协议的可扩展性(Extension Mechanism) 良好的工具支持 SOAP的消息称为一个SOAP Envelope,包括SOAP Header和SOAP BODY。其中,SOAP Header可以方便的插入各种其它消息来扩充Web Service的功能,比如Security(采用证书访问Web Service),SOAP BODY则是具体的消息正文,也就是Marshall后的信息。
SOAP调用的时候,也就是向一个URL(比如http://ws.invesbot.com/stockquotes.asmx?WSDL)发送HTTP Post报文,调用方法的名字在HTTP Request Header SOAP-Action中给出,接下来就是SOAP Envelope了。
服务端接到请求,执行计算,将返回结果Marshall成XML,用HTTP返回给客户端。
SOAP的工具支持非常好,比如在.NET里,可以用WSDL.exe非常方便的为一个Web Service生成本地Proxy(Proxy模式),这样,你的程序就像调用本地API一样了,而由Framework为你完成Marshall和传送的工作。
3)REST
REST - Representational State Transfer, 是Roy Fielding的博士论文中提出的概念,其实,与其说REST是一种Web Service协议,不如说REST是一种Web based软件架构,一种基于Resource State的服务访问架构。
通俗的将,可以用你访问我的Blog的过程来描述REST的工作流程。当你访问我的Blog首页,其实就是对我的Blog的一个资源访问,那么Web Server会将这个资源的Representation返回给你,也就是我的Blog的首页的HTML。当你点击了这个HTML中的一个link,比如某篇Blog,你实际上就又对另一个资源发生了请求,Web Server会将新的资源Representation以HTML的形式发送给你。
我曾经看过一个人对REST和SOAP的解释,我觉得很对,SOAP是面向活动,而REST是面向资源的。
Build一个Web Service,in SOAP way还是in REST way还是有很大的不同的。
比如说,要实现一个世界杯赛程、赛果、球员评分查询的这样一个简单的Web Service,如果用SOAP的话,我们可以生成一个WSDL:
http://www.mengyan.org/worldcup2006/?WSDL
它包含很多方法,比如GetMatchResult, GetPlayerScore, GetFixture,客户端通过调用这些Web Method来获得相应的数据。
如果用REST的方法来构架,就得先分析系统中都有那些资源,每一个资源有一个URL,比如:
http://www.mengyan.org/worldcup2006/fixture/?team=Brazil
http://www.mengyan.org/worldcup2006/match/?id=1
http://www.mengyan.org/worldcup2006/player/?name=Beckham
每种资源都是一个URL,然后利用URL Path或者Query来实现参数的传递,Response则是这个资源的一个表示形式。
当然,这些只是逻辑上的URL,具体的实现是采用URL Rewrite还是其它就可以你的具体设计了。
万事没有绝对,你也可以用其它方法设计REST Web Service。比如Flickr,它的Rest Service都是如下样子:
http://www.flickr.com/services/rest/?method=flickr.test.echo&name=value
也就是说,整个Service是一个资源,method变成了参数,用Method来标明不同的方法调用。我觉得,Flickr的REST Service其实还是采用传统的SOAP思想考虑的,只不过用了REST来实现。不能称作Thinking in REST way 。
|
| |