是否有可能在Flex中执行轻量级REST调用?

问题描述:

我们正在将Flex应用程序转换为使用某些REST API。是否有可能在Flex中执行轻量级REST调用?

向代码中添加mx.rpc.http.HTTPService类时,SWF二进制输出从175KB增加到260KB。这是一个不可接受的打击。

有没有更好的方式来从Flex应用程序执行轻量级REST调用?使用外部接口JS只是为了从那里打电话,我们更好吗?

+0

你是说你的调试版本或发布版本的二进制输出?发布版本在我的经验中更加优化。如果您正在比较调试输出,那么在尝试解决问题之前,我会导出发布版本以验证您确实存在问题。 – JeffryHouser 2010-12-19 14:12:42

+0

另外,如果你想优化SWF大小,我建议你看看tu如何使用运行时共享库​​ – 2010-12-19 14:49:22

+0

@flextras - 更新大小以反映发布版本。 @PeZ - RSL在这种情况下不会帮助我们,这是一个单一的SWF场景。 – 2010-12-19 15:16:20

flash.net.URLLoader内置于运行时,不会导致文件大小的增加。我之前将它用作JSON客户端,因此您不应该遇到任何问题。

下面是一个非常简单的例子。有关其限制的信息,请参阅HTTP_STATUSHTTP_RESPONSE_STATUS的文档。

var request: URLRequest = new URLRequest("http://tempuri.org/service/json"); 
request.method = "POST"; 
request.contentType = "application/json"; 
request.data = JSON.encode(jsonObject); 

var loader : URLLoader = new URLLoader(request); 

// Only supported by some browsers 
loader.addEventHandler(HTTPStatusEvent.HTTP_STATUS, statusCodeReceived); 

// AIR only 
loader.addEventHandler(HTTPStatusEvent.HTTP_RESPONSE_STATUS, statusCodeReceived); 

loader.addEventHandler(Event.COMPLETE, function(ev:Event):void 
{ 
    var responseJson : String = request.data as String; 

    var responseJsonObject : String = JSON.decode(responseJson); 
}); 

loader.addEventHandler(SecurityErrorEvent.SECURITY_ERROR, errorHandler); 
loader.addEventHandler(IOErrorEvent.IO_ERROR, errorHandler); 
+0

太棒了!一个简单的使用代码示例会很棒:) – 2010-12-19 13:33:33

+0

从我记得,官方文档提供了一个如何使用它的示例 – 2010-12-19 14:48:06

我一直认为一个好的方法是为浏览器的JavaScript HTTP API XmlHttpRequest创建一个小接口。我从来没有尝试过,但我已经研究过它,看起来它可能相当简单。

这将带来额外的好处,可以解决Flash Player的安全限制,从而导致其HTTP支持严重受损。

+1

IMO,这是一个不好的方法,因为它不必要地使代码复杂化。另外,AJAX/XmlHttpRequest与flash player net API有相同或更多的限制(并且你必须被授予访问JS的权限,而且这个限制更为有限)。 – 2010-12-19 19:47:29

+0

我不同意XHR比Flash Player有更多的限制。 FP不能使用PUT或DELETE,不能使用请求头“授权”,如果状态码是* 200以外的任何*(甚至201),则不能访问响应体。 – 2010-12-22 20:39:54

+0

我认为这是启用新的HTTP/2功能的好方法。 – GxFlint 2015-03-24 04:28:30