18.2.在Flex程序之间使用RESTful通信

18.2.1. 问题
我想要整合一个Flex 应用程序和一台使用RESTful 或者表述性状态转移风格通讯的服务器,例如Rails 或者其他服务器。
18.2.2. 解决办法
创建一个HTTPService 对象来使用合适的路径通过POST 和GET 方法和你的服务器通讯,呼叫远端服务器上的方法。
18.2.3. 讨论
所谓RESTful 的服务一般被用来描述一个服务使用所有4 个可能的HTTP 头:PUT,POST,DELETE 以及GET。这四个头通常对应四种基础的数据访问操作:创建,读取,更新以及删除,他们一般和常说的CRUD 一起使用。在实践中,一个单独的重载的服务端方法以来http头来执行四种基础数据访问操作。在REST 类应用中,方法时常会被映射到资源,这样四种数据访问方法,CRUD 允许资源的创建,删除,更新以及获取。这个资源可以是简单资源,数据库的一个表,或者一个复杂的模型对象。

Flash 播放器限制了只能使用GET 和POST 方法,意思就是任意介于FLEX 应用与服务之间的通讯都需要指明DELETE 或者PUT 方法使用不同与标准REST 的方法,例如附加他们到一个GET 或POST 信息上。

发送一个PUT 命令到一个Rails 应用,你可以这样做:
+展开
-ActionScript
var request:URLRequest = new URLRequest();
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, resultHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatusHandler);
request.url = "http://rails/view/resource";
// Set the request type as POST and send the DELETE command as
// a variable in the data of the request
request.method = URLRequestMethod.POST;
request.data._method = "DELETE";
loader.load(request);

Ror(Ruby on Rails,一种web 敏捷开发框架)在正确的HTTP 方法不能被使用的时候,允许_methdo 变量来申明描述的方法。对于其他类型的REST 类服务,类似的操作都会被使用到。

对于HTTPService 对象,你可以使用BlazeDS 或者Adobe LiveCycle 来配合它。HTTPService定义了一个useProxy 属性,当它设为true 会指定flash 播放器只与services-config.xml 文件中的服务器定义来通讯。一个请求会建立并且发送一个被代理的PUT/DELETE/OPTIONS(以及其他请求)被发送到Adobe LiveCycle 或者BlazeDS 服务器,然后服务器会建立并且发送实际的HTTP 请求并且返回反馈内容到flash 播放器。代理同时也控制来自于HTTP 500 代码服务器错误的失败反馈,它可以返回给flash 播放器让HTTPService 可以处理。

当你配置好HTTPService 对象使用BlazeDS 或者lifecycle 代理之后,你可以在HTTPService上通过设定method 属性来使用服务器的全部范围的Http 头。
+展开
-XML
<mx:HTTPService id="proxyService"
destination="http://localhost/app/url"/>

<mx:Script>
<![CDATA[
private function sendPut():void {
proxyService.method = "DELETE";
proxyService.send("id=2");
}

]]>
</mx:Script>

最后,有个叫Garbriel Hanford 的人开发了一个叫做as3httpclient 的库使用了二进制的Flash套接字来读取HTTP 流并且解码HTTP 反馈。这个库允许你来发送和阅读GET,POST,PUT以及DELETE 这四种HTTP 反馈但是,这个需要一个crossdomain.xml 文件来允许Flash 播放器连接到服务器80 端口。默认情况,与服务器通过套接字来通讯的时候,你需要和服务器使用更为REST 的反馈以及严格的HTTP,这个类库提供了足够强大可以用来替代标准的HTTPService.

更多的信息和代码下载可以在这里看到:
http://code.google.com/p/as3httpclientlib/.

加支付宝好友偷能量挖...


评论(0)网络
阅读(193)喜欢(0)flash/flex/fcs/AIR