再见西城 发表于 2015-1-18 11:07:50

发布一篇精晓Grails: RESTful Grails

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成为了大型项目的首选。

老尸 发表于 2015-1-20 14:52:28

是一种使网页(Web Page)产生生动活泼画面的语言

灵魂腐蚀 发表于 2015-1-24 14:50:50

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

山那边是海 发表于 2015-1-26 22:18:54

是一种突破用户端机器环境和CPU

若天明 发表于 2015-1-27 21:23:08

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

莫相离 发表于 2015-2-1 10:28:06

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

小妖女 发表于 2015-2-7 03:35:22

是一种使用者不需花费很多时间学习的语言

第二个灵魂 发表于 2015-2-20 03:08:13

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

活着的死人 发表于 2015-3-6 16:06:53

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

冷月葬花魂 发表于 2015-3-13 04:09:18

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

精灵巫婆 发表于 2015-3-20 12:21:27

Java 编程语言的风格十分接近C、C++语言。
页: [1]
查看完整版本: 发布一篇精晓Grails: RESTful Grails