|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。
本月,我将向您出现怎样让您的Grails使用程序成为原始数据—详细指XML—的源,从而让其他的Web使用程序也可以利用它。我一般把这类情形表述为:为您的Grails使用程序创建Web服务,但比来这个说法被付与了新的寄义。良多人把Web服务与SOAP及成熟的面向服务架构(service-orientedarchitecture,SOA)接洽到一同。假如选择这类办法的话,Grails具有两个插件能够用来将SOAP接口公然给使用程序。但我将向您出现的内容并不是处置某一个诸如SOAP如许的详细完成,而是如何利用一个基于具象形态传输(RepresentationalStateTransfer,REST)的接口来前往一般新式XML(PlainOldXML,POX)。
说到RESTfulWeb服务,了解启事与了解办法一样主要。RoyFielding的博士论文—REST这个缩略词的起源处—归纳综合了完成Web服务的两小气法:一个是面向服务,另外一个是面向资本。在向您呈实际现本人的RESTful面向资本架构(resource-orientedarchitecture,ROA)的代码前,我将先廓清这两个计划道理之间的差别,并叙述广泛利用的REST的两种最有争议的界说。进修了本文第一部分的所有内容以后,稍后您就能够进修到良多的Grails代码。
REST简介
当开辟职员说要供应RESTfulWeb服务时,他们一般是指想要供应一个复杂的、无争议的办法来从他们的使用程序中猎取XML。RESTfulWeb服务一般供应一个能够呼应HTTPGET哀求而前往XML的URL(稍后我将给出REST的改正式的界说,它对这个界说举行了改进,固然修改不年夜,但仍旧很主要)。
Yahoo!供应了大批的RESTfulWeb服务,它们呼应复杂的HTTPGET哀求,而前往POX。比方,在Web扫瞄器的地位字段键进http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=beatles。您将取得利用XML的Web搜刮了局,它和在Yahoo!主页的搜索框里键进beatles而取得的利用HTML的征采了局是一样的。
假如假定Yahoo!撑持SOAP接口的话(实践上其实不撑持),那末收回一个SOAP哀求将会前往不异的数据,但关于开辟职员来讲,收回哀求大概更费力一些。在查询字符串里,哀求方将必要呈交的不是简单的一组称号/值对,而是一份界说明白的、带有一个SOAP报头和注释部分的XML文档—并且要用一个HTTPPOST而非GET来提交哀求。一切这些分外的事情完成后,呼应会以一个正式XML文档的情势前往,它与哀求一样,也有一个SOAP报头和注释部分,但要取得查询了局,必要往失落这些内容。Web服务经常作为庞大SOAP的一种复杂替换品而被接纳。
有几种趋向能够标明Web服务的RESTful办法愈来愈提高了。Amazon.com既供应了RESTful服务又供应了基于SOAP的服务。实际的利用形式标明十个用户中几近有九个都偏幸RESTful接口。别的还有一个值得注重的情形,Google于2006年12月正式公布否决基于SOAP的Web服务。它的一切数据服务(回类为GoogleDataAPI)都包括了一个加倍具有REST作风的办法。
面向服务的Web服务
假如把REST和SOAP之间的差别回结为GET和POST之间的好坏,那就很简单辨别了。所利用的HTTP办法是很主要的,但主要的缘故原由与您最后料想的分歧。要充实懂得REST和SOAP之间的差别,您必要先把握这两个战略的更深层语义。SOAP包括了一个Web服务的面向对象的办法—个中包括的办法(或动词)是您与服务订交互的次要体例。REST接纳面向资本的办法,办法中的对象(或名词)是最重要的部分。
在一个SOA中,一个服务挪用看起来就像是一个远程历程挪用(remoteprocedurecall,RPC)。设想,假如您有一个带有getForecast(Stringzipcode)办法的JavaWeather类的话,就能够容易地将这个办法公然为一个Web服务了。实践上,Yahoo!就有如许一个Web服务。在扫瞄器中输出http://weather.yahooapis.com/forecastrss?p=94089,如许就会用你本人的ZIP代码来替换p参数了。Yahoo!服务还撑持第二参数—u—,该参数既承受华氏温度(Fahrenheit)标记f,又承受摄氏温度(Celsius)标记c。不难设想,在设想的类上重载办法署名就能够承受第二参数:getForecast("94089","f")。
回过去再看一下我方才做的Yahoo!搜刮查询,一样,不难设想出,能够将它重写为一个办法挪用。http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=beatles轻松转换成了WebSearchService.webSearch("YahooDemo","beatles")。
以是假如Yahoo!挪用实践上为RPC挪用的话,那这跟我先前所称的Yahoo!服务是RESTful的岂不是相互冲突的么?很不幸,就是冲突的。但犯这类毛病的不但我一个。Yahoo!也称这些服务是RESTful的,但它也坦言:从最严厉的意义上讲这些服务其实不切合RESTful服务的界说。在Yahoo!WebServicesFAQ中寻觅“甚么是REST?”,谜底是:“REST代表RepresentationalStateTransfer。年夜多半的Yahoo!WebServices都利用‘类REST’的RPC款式的操纵,而非HTTPGET或POST……”
这个成绩在REST社区内一向激发着争辩。成绩是没有正确的界说能够复杂了然地形貌这类“较之POST更偏好HTTPGET的、较之XML哀求更偏好复杂的URL哀求的、基于RPC的Web服务”。有些人称之为HTTP/POX大概REST/RPC服务。其别人则对应HighRESTWeb服务—一种与Fielding的面向资本架构的界说更靠近的服务—而称之为LowRESTWeb服务。
我将相似Yahoo!的服务称为GETful服务。这其实不暗示我看轻它—正相反,我以为Yahoo!在整理不太正式的(low-ceremony)Web服务的汇合方面做的相称好。这个词恰如其分地归纳综合出了Yahoo!的RPC款式的服务的好处—经由过程收回一个复杂的HTTPGET哀求来取得XML了局—,并且没有滥用Fielding所作的原始界说。
<p>
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。 |
|