首页 > 网站 > WEB开发 > 正文

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

2024-04-27 13:52:25
字体:
来源:转载
供稿:网友
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>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表