REST和Flex

在这个指导文章里,我们开始应用REST和 Flex ,你是不是在询问,什么是REST,怎么使用REST啊?



REST是表述性状态转移(Representational State Transfer),可帮助你提供服务,通过XML与你的数据库沟通。不仅如此,你可以组合REST和RIA,开发WEB应用程序。实际上,它是一个可伸缩系统,让通信变得更为轻松。



REST的另外一个优势就是:它从功能上区分了客户端和服务器端的目标,这样你能以并行的方式工作,现在你最喜欢的客户端或服务器端技术,以开发应用程序。如果你使用不同的技术,如AJAX或 Flex 创建GUI,但是仍然使用同样的设备与数据库通信的话,对你也非常有帮助。REST基于HTTP标题栏,实际上所有从客户端到服务器端的通信都通过HTTP标题栏,如POST, GET, PUT和DELETE.



这非常有趣,因为你只需调用一个特定的路径,并设定正确的标题栏,就可以创建,阅读,更新或删除(CRUD)记录。REST使用令牌认证,以安全地与和您的RIA或网站通信。有了令牌,你可以防止其它网站或应用程序调用你的服务。



如果你是一名 Flex 开发人员,你就非常清楚 Flex 不支持一些HTTP标题栏如PUT 或DELETE,因此我们将采用一个免费的资源库,称为as3httpclientlib , 它采用使用socket的操作(workaround)来解决这个 Flex 问题。



在开始编码前



在开始根据本指导文章进行操作前,你必须下载,并且配置好电脑,以使用Rails和Flex4。如果你的电脑已经配置好了,请跳到下一段。



如果你运行的是Mac OS X, 你就已经预装了Ruby;如果你运行的是Windows OS,你必须从 http://rubyforge.org/frs/?group_id=167 下载Ruby,并安装这个软件。



如果你想要测试一下,看看在你的操作系统上是否安装了Ruby,那在命令提示字元输入ruby –v。如果结果是“not found”,那么你就要下载并安装一个。



安装了Ruby之后,你可以下载Rubygems,它会帮助你轻松下载并安装所有的Ruby模块。 安装了RubyGems之后,你可以下载Rails, Mongrel和SQLite(如果终端是Mac OS X,使用以下代码行,如果是Windows,使用命令提示字元):

for RAILS:

sudo gem install

rails
for Mongrel:

gem install

Mongrel
for SQLite:

gem install

sqlite3-ruby


现在,我们来看下最后几步:

Rails是服务器端技术,我选择它通过数据库和REST来创建互动。实际上,有了Rails, 我们可以创建各种方法向客户端提供REST服务。为什么是Rails?因为我认为开始时,使用Rails非常简单,它采用的是OOP语言,所以你可以使用从Actionscript 3中学到的相同概念,以在Rails中检索。



Mongrel是一个HTTP服务器,Rails应用程序在运行,你可以在Mongrel网站了解有关Mongrel的更多信息。



最后,SQLite是一个免费数据库,使用起来非常快捷,它与你可以在Adobe AIR里发现内嵌的内容是一样的。SQLite的一个关键特点是:你的数据库只有一个文件,所以你可以轻松拖拽,移动数据到另外一个电脑上,或移动设备上。幸运的是,它是“名不符实的”。实际上,SQLite数据库可以储藏多达4GB的数据,如需了解更多有关SQLite的信息,请登陆官方网站。我建议您下载免费的SQLite Database浏览器,你可以轻松使用这个应用程序.



最后,你可决定在你的电脑上安装哪一个Ruby IDE;你可以选择Aptana standalone或eclipse plugin,如果你使用的是Mac OS X使用TextMate,如果你使用的是Win OS, 使用Visual Studio的Ruby in Steel(这个不是开源的)。



为客户端,你必须下载Flash Builder BETA (standalone或eclipse plugin),你可以在labs.adobe.com找到相应的连接。然后你要下载3httpclientlib,以使用REST, 该资源库也依赖于as3crypto库。



As3crypto是一个非常棒的资源库,用于加密和解密字符串数据。我常常用这个数据库来创建登陆表单(用Flash或Flex), 因为你可以向服务器端脚本发送加密数据。as3corelib是最受欢迎的AS3资源库之一。它包括许多功能,如JSON序列化,API, Image encoders, String 和Number utils等等。两个资源库都在as3httpclientlib中使用,从而解决Flex 问题,以使用DELETE 和 PUT headers。



在你下载完毕所有的文件后,我们就准备开始了。在这个教程中,你将使用REST和 Flex 做一个地址本。

RAILS部分



当我第一次接触Rails时,我对这种语言留下了深刻的印象,因为编写起来非常简单,也非常强大。



第一步就是,创建数据库和各种方法提供REST服务。



打开你的终端或命令提示字元,创建并设置项目文件夹,运行这些代码行。

view plaincopy to clipboardprint?
rails rails
cd rails
rake db:create:all
./script/generate scaffold AddressBook firstname:String surname:String role:String description:Text company:String
rake db:migrate
rails rails
cd rails
rake db:create:all
./script/generate scaffold AddressBook firstname:String surname:String role:String description:Text company:String
rake db:migrate

使用这几行代码,你就创建了使用 Flex 所需要的内容,很酷吧!



现在,你必须对Rails代码进行一些改变,以应对可能在开发过程中出现的问题。不过首先,让我解释下这五行代码。



用第一行代码,你创建了Rails应用程序的一个骨架。实际上,你会找到用来安装Rails文件的文件夹。





使用第二行代码,你可进入rails文件夹;使用第三行代码,创建数据库环境,特别是创建三个数据库,一个用于开发范围,一个是“生产”(production),一个是测试。



Rake是一个由ruby编写的build工具,包含预装任务库,用户可用来让Ruby自动工作。如需了解有关rake的更多信息,请登陆 http://rake.rubyforge.org/ 。



在本例中,你使用Rake创建数据库。如果你愿意,你可使用之前我提到的SQLite Database浏览器在可视化模式里创建(可从sourceforge下载)。



在脚本文件夹里,你调用generate scaffold在Rails里创建MVC构架,这样你可以创建读取数据库的REST。脚手架(scaffolding)是一种方法,用来构件数据库支撑的软件应用程序,使用一些特定框架。在本例中,使用Ruby,你创建了一切,而使用的脚手架生成创建了与数据库互动所需要的一切。

最后一行代码从模块转移到SQLite开发数据库。如果你想看看Rails是怎样实现这一切的时候,看看rails>db>migrate文件夹里的临时文件。



现在,检测你的配置,在你的终端输入这行代码或命令提示字元



./script/ server



当你按下Enter键,你就打开了Mongrel,你可打开WEB浏览器,登陆Enter轻松进行检测, 如果进展顺利,则你可以看到:



如果你的Mongrel正在运行,那么继续,更改Rails里的一些代码行。



首先,打开你在rails>app>controllers文件夹里找到的address_books_controller.rb,修改创建函数,这样所有数据会从数据库中返回:

view plaincopy to clipboardprint?
def create
@address_book = AddressBook.<span class="category1">new</span>(params[:address_book])
respond_to <span class="category1">do</span> |format|
<span class="category1">if</span> @address_book.save
flash[:notice] = '<span class="quote">AddressBook was successfully created.</span>'
@finalData = AddressBook.all
format.xml { render :xml => @finalData.to_xml(:dasherize => <span class="category1">false</span>) }
<span class="category1">else</span>
format.xml { render :xml => @address_book.errors, :<span class="category2">status</span> => :unprocessable_entity }
end
end
end
def create
@address_book = AddressBook.<span class="category1">new</span>(params[:address_book])
respond_to <span class="category1">do</span> |format|
<span class="category1">if</span> @address_book.save
flash[:notice] = '<span class="quote">AddressBook was successfully created.</span>'
@finalData = AddressBook.all
format.xml { render :xml => @finalData.to_xml(:dasherize => <span class="category1">false</span>) }
<span class="category1">else</span>
format.xml { render :xml => @address_book.errors, :<span class="category2">status</span> => :unprocessable_entity }
end
end
end

我对原Catalyst文件进行了几个修改,添加了"Create New", 更换"Delete" 和 "Save" 按钮。 我根据项目偏好,采用了Spark主题。然而,这些更改是用来修定Catalyst项目的,因为现在,你可使用Catalyst创建一个项目,并使用Flash Builder修改,但是你不能修改在Catalyst里用Catalyst构件的一个项目。



在确定了MXML中的GUI后,你可以开始创建MainGroupView文件,通过扩展Flex 4框架的GROUP类,在MXML文件的主节里使用它,该文件将与MXML文件互动。在这个类里,你定义:

l 从数据库获取所有数据的方法;

l 从数据库删除一名人员信息的方法;

l 修改一名人员信息的方法;

l 向数据库添加一名人员的方法



在我们写下这些方法前,你必须知道REST是怎样工作的,这个表格显示了怎么使用REST完成这一切;



l 获取所有是语句 -http://localhost:3000/address_books.xml (HTTP header: GET)

l 在特定记录里检索数据 -http://localhost:3000/address_books/1.xml (HTTP header:

l 修订记录 -http://localhost:3000/address_books/1.xml (HTTP header: PUT,并传递新数据bytearray,以储存在数据库中)

l 删除一个记录 -http://localhost:3000/address_books/1.xml (HTTP header: DELETE)

l 创建新的记录 -http://localhost:3000/address_books.xml (HTTP header: POST,并传递新的数据XML,以储存在数据中心)



在这个样例中,你将使用HTTPService类和as3httpclientlib资源库,以了解这些不同的方法是怎样在 Flex 里与REST一起发挥作用的。显然,如果你仅采用HTTPService类,你不能使用PUT和DELETE标题栏,但是你可以通过as3httpclientlib资源库解决这个问题。



当我们的应用程序启动时,你可以用保存在数据库中的数据填充列表组件(如果你想要填充数据库,使用Sqlite Database Browser或通过使用./script/console通过终端或提示符启动的 Rails console 进行填充。在本范例中,我们将使用HTTPService请求所有数据。



你可使用函数callRestService通过HTTPService请求数据,它使用同样的HTTPService 变量,如果请求所有数据,一个记录或其它,仅需要改变路径。



此后,你可创建使用as3httpclientlib的更新方法。



有了httpclient变量,你必须确定URL,向REST服务发出bytearray数据。createXMLContent() 函数检索 Flex 格式中的所有的数据,并为记录更新或创建XML。注意,HttpClient变量请求URL变量,而不是一个简单的URLRequest, 你可在as3corelib资源库中找到这个对象。



最后,你可添加DELETE方法。



在这个函数中,我们使用httpclient对象del方法,而不是PUT方法(曾被用来更新数据库中的记录),删除个人信息。遵循下面同一过程:

l 确定正确的路径;

l 如果方法要求,传递数据;

l 当服务器回复你的请求时,监听。



同样,如果你使用HTTPService 对象或HttpClient对象



你可从这个链接下载最终样例。





最后的一些思考:



我想,REST是一个非常有趣,也非常简易的与服务器端通信的方法。我希望,在 Flex 或FLASH的下一个版本里,它们会解决标题栏问题,让我们可以在使用REST的时候,不需要额外的数据库。现在,as3httpclientlib是这个问题的解决方案。



Flash Builder 4 正式版下载地址:http://g.csdn.net/5128184


本文来自CSDN博客http://blog.csdn.net/lihe111/archive/2010/04/12/5476786.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值