在这个指导文章里,我们开始应用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
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