【问题标题】:Is it possible to do lightweight REST calls in Flex?是否可以在 Flex 中进行轻量级 REST 调用?
【发布时间】:2010-12-19 13:17:48
【问题描述】:

我们正在转换一个 Flex 应用程序以使用一些 REST API。

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

有没有更好的方法从 Flex 应用程序进行轻量级 REST 调用?我们是否最好使用外部接口 JS 来进行调用?

【问题讨论】:

  • 您说的是调试版本还是发布版本的二进制输出?根据我的经验,发布版本更加优化。如果您要比较调试输出,那么我会在尝试解决之前导出发布版本以验证您确实有问题。
  • 另外,如果你想优化 SWF 大小,我建议你看看你如何使用 Runtime Shared Libraries
  • @flextras - 尺寸已更新以反映发布版本。 @PeZ - 在这种情况下,RSL 对我们没有帮助,这是一个单一的 SWF 场景。

标签: apache-flex actionscript-3 rest remoting


【解决方案1】:

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);

【讨论】:

  • 据我记得,官方文档提供了一个如何使用它的示例
【解决方案2】:

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

这将带来额外的好处,即绕过 Flash Player 的安全限制,这使得其 HTTP 支持严重受损。

【讨论】:

  • IMO,这是一种不好的方法,因为它不必要地使代码复杂化。此外,AJAX/XmlHttpRequest 与 flash player net API 具有相同或更多的限制(并且您必须首先获得对 JS 的访问权限),并且受到更多限制。
  • 我不同意 XHR 比 Flash Player 有更多限制。 FP 不能使用 PUT 或 DELETE,不能使用请求标头“授权”,并且如果状态代码是 200(甚至 201)以外的任何内容,则无法访问响应正文。
  • 我认为这是启用新 HTTP/2 功能的好方法。
猜你喜欢
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多