`

REST和Flex

    博客分类:
  • 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  { renderml => @finalData.to_xml(:dasherize => <span class="category1">false</span>) }  
      <span class="category1">else</span>  
        format.xml  { renderml => @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  { renderml => @finalData.to_xml(:dasherize => <span class="category1">false</span>) }
      <span class="category1">else</span>
        format.xml  { renderml => @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
分享到:
评论

相关推荐

    Flex Arcgis rest编程使用

    总结起来,Flex ArcGIS REST编程涉及到的关键技术点包括:Flex框架、REST服务、ArcGIS Server、地图服务发布和管理、以及在Flex中使用ArcGIS API for Flex进行WebGIS应用开发。开发者需要理解这些技术的原理和用法,...

    Flex构建REST客户端

    Flex构建REST

    flex开发系列书籍:基于REST服务的WebGIS系统

    根据给定文件的信息,本文将深入探讨基于Flex和REST服务的WebGIS系统开发,并通过陇西县地理空间信息应用系统这一实例,展示如何利用这些技术提高WebGIS开发效率及用户体验。 ### 一、WebGIS的发展历程及其问题 ...

    基于Flex_REST的WebGIS研究

    Flex_rest的发布开发,希望能帮到大家

    flex 官方文档 中文教程

    Flex支持与各种数据源的通信,如AMF、SOAP、REST等,可以方便地调用Web服务,获取和更新远程数据。 9. **动画和效果** 使用Flex,开发者可以创建复杂的动画效果,增强用户体验。Timeline和Transitions类库提供了...

    flex例子.flex源程序

    8. **Services and Remote Objects**: Flex可以方便地与服务器端进行通信,支持AMF(Action Message Format)和Web服务(SOAP、REST)等。 9. **Flex Builder/Flash Builder**: 这是一个集成开发环境(IDE),提供...

    flex全书籍 flex全书籍

    5. **Services & Remoting**:Flex可以方便地与后端服务进行通信,如通过AMF(Action Message Format)与Flash Remoting连接,或者使用HTTP、SOAP、REST等协议访问Web服务。 6. **Flex Builder/Flash Builder**:...

    FLEX+REST地图服务发布方法

    详细介绍了基于ArcGIS Server发布REST地图服务的方法,以及在Flex中利用ArcGIS API for Flex调用该REST地图服务的方法。并附上ArcGIS API for Flex的SWC资源和官方samples,以及详细的PPT过程步骤和配套Word及实例...

    Flex语言开发介绍及实例

    总的来说,学习Flex开发,你需要了解ActionScript的基本语法,掌握MXML的布局和组件声明,熟悉Flex SDK和相关开发工具的使用,以及如何通过REST接口与其他Web服务进行数据交互。通过实例学习,可以更好地理解和应用...

    FLEX4_Flex4教程 - FLEX4从入门到精通,挺不错的值得一看

    7. **Services和Remoting**:Flex4支持与各种后端服务进行通信,包括AMF(Action Message Format)、SOAP、REST等,开发者可以方便地集成XML、JSON或自定义数据格式,实现数据的交换和处理。 8. **图形和动画**:...

    REST地图与天地图叠加

    在Flex客户端中,我们可以利用SuperMap iClient的API来访问和操作这些REST地图服务。 天地图是中国国家基础地理信息中心提供的官方地图服务,包含了丰富的地形、地名、影像等地理信息数据。天地图服务提供了WMS...

    Flex Service

    Flex提供了MXML和ActionScript两种编程语言,使得UI设计和业务逻辑的分离更加清晰。 在Flex与Web服务的整合中,Web服务通常作为数据提供者,而Flex作为前端展示层。Web服务可以是SOAP(简单对象访问协议)或RESTful...

    flex如何跟JAVA结合

    Flex是一种基于ActionScript和MXML的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。它由Adobe公司开发,允许开发者创建交互性强、视觉效果丰富的用户界面,尤其适用于Web应用。...

    flex+php.rar_Flex+PHP_PHP Flex_felx p_flex_flex php

    Flex和PHP的集成是开发富互联网应用程序(RIA)时常用的一种技术组合。Flex是一种基于Adobe AIR的开源框架,用于创建动态、交互式的用户界面,而PHP则是一种流行的服务器端脚本语言,常用于构建Web应用。这两者的...

    flex4 开发文档

    7. **服务和通信**:讨论如何使用HTTPService、WebService、AMFChannel等与服务器进行数据交换,以及如何集成第三方Web服务和REST API。 8. **错误处理和调试**:介绍如何在Flex应用中捕获和处理错误,以及使用Flex...

    flex3.0学习指南

    此外,Flex还提供了与各种数据服务(如AMF、SOAP、REST)集成的能力,方便地处理远程数据。 六、图形和动画 Flex提供了一系列的绘图API,可以创建自定义的矢量图形和位图。同时,利用Tween和Timeline类,可以实现...

    Flex4 in Action

    Flex 应用程序可以通过多种方式与服务器端进行交互,包括 HTTP 请求、Web 服务调用 (SOAP 或 REST) 以及 AMF (Action Message Format) 数据交换等。这些技术允许 Flex 应用程序动态加载数据、提交表单、获取实时更新...

    Flex4中文快速入门

    7. **服务调用**:Flex可以与各种后端服务通信,如AMF、SOAP、REST等。学习如何使用HTTPService、WebService等组件进行数据交换,是实现富客户端与服务器端交互的基础。 8. **状态管理**:在Flex中,可以定义不同的...

    FlexBuilder2帮助文档

    8. **服务连接**:Flex可以与各种后台数据源进行通信,如AMF、SOAP、REST等。学习如何在Flex中使用HTTPService、WebService或Remoting Destination来访问远程数据。 9. **动画和效果**:FlexBuilder2支持创建丰富的...

Global site tag (gtag.js) - Google Analytics