32

我正在使用用 Java 实现的 Restful 架构开始一个项目(使用新的 JAX-RS 标准)

我们计划使用 Flex 应用程序开发 GUI。我已经发现使用 HTTPService 组件的这个实现存在一些问题(响应错误代码、标题访问......)。

你们中的任何人都有类似项目的经验。可行吗?

4

15 回答 15

23

这里的问题是,很多围绕这个问题的网络讨论已经有一年或更长时间了。我现在正在做同样的研究,这就是我今天学到的。

Jorge Rasillo 和 Mike Burr 于 2008 年 8 月撰写的这篇IBM Developer Works 文章展示了如何制作 Flex 前端/RESTful 后端应用程序(PHP 和 Groovy 中的示例)。不错的文章。无论如何,这里是外卖:

  • 他们的 PHP/Groovy 代码使用并期望PUT 和 DELETE。
  • 但是 Flex 代码必须使用 POST,但将 HTTP 标头 X-Method-Override 设置为 DELETE(我认为您可以对 PUT 执行相同的操作)。
  • 请注意,这不是上面讨论的代理方法。

// Flex doesn't know how to generate an HTTP DELETE.
// Fortunately, sMash/Zero will interpret an HTTP POST with
// an X-Method-Override: DELETE header as a DELETE.
deleteTodoHS.headers['X-Method-Override'] = 'DELETE';

这里发生了什么事?IBM Web 服务器截获“POST with DELETE”并将其解释为 DELETE。

因此,我进一步挖掘并找到了这篇文章并与 Don Box(最初的 SOAP 人之一)进行了讨论。显然这是一种相当标准的行为,因为某些浏览器等不支持 PUT 和 DELETE,并且是一种已经存在一段时间的解决方法。这是一个片段,但还有更多的讨论。

“如果我正在构建一个 GData 客户端,我真的想知道为什么我会费心使用 DELETE 和 PUT 方法,因为 X-HTTP-Method-Override 将在更多情况/部署中工作。”

我从中得出的结论是,如果您的 Web 端支持此 X-Method-Override 标头,那么您可以使用这种方法。Don Box 的评论让我觉得它得到了很好的支持,但我还没有证实这一点。

另一个问题是关于能够读取 HTTP 响应标头。同样,从Nathan de Vries 2007 年的一篇博文中,我们看到了这一点的讨论。他用自己的评论跟进了那篇博文和讨论:

“Web 前端的唯一变化是 Flash Player 的较新版本(当然是 Flex 3 beta 提供的那些)现在支持 HTTPStatusEvent 实例的 responseHeaders 属性。”

我希望这意味着它现在不是问题。

于 2008-10-02T16:10:31.297 回答
6

正如许多人指出的那样HTTPService,这有点简单,并没有做你想做的所有事情。但是,这只是,和等类HTTPService之上的糖。使用这些,您可以组装大多数 HTTP 请求。flash.net.*URLLoaderURLRequestURLRequestHeader

当涉及到对 GET 和 POST 以外的其他方法的支持时,问题主要在于某些浏览器(例如 Safari)不支持这些方法,而 Flash Player 的所有网络都依赖于浏览器。

于 2008-10-01T13:16:26.747 回答
5

Flex 充当纯 RESTful 客户端的能力存在明显的缺陷。

以下评论来自此博客

问题是 HTTPService 类有几个主要限制:

  1. 开箱即用仅支持 GET 和 POST 方法(除非您使用 FDS 并将 useProxy 属性设置为 true)
  2. 无法设置请求标头,也无法访问响应标头。因此,如果出现错误,我将无法访问响应正文。
  3. 它 HTTPService 得到一个 200 以外的状态码,它认为是一个错误。(事件 201,哎哟!!)。FaultEvent 不提供有关任何响应正文的状态代码的信息。Flex 客户端不知道出了什么问题。

Matt Raible对带有 Rails、Grails、GWT 和 Flex 的 REST 做了一个很好的介绍,其中有一些很好的参考链接。

它是否可行实际上取决于您愿意通过代理等来解决多少问题。

于 2008-09-30T15:16:05.377 回答
3

我一直在研究完全支持 REST 的 HTTPService 组件的开源替代品。如果有兴趣,您可以在此处找到 beta 版本(源代码和/或编译后的 Flex 共享运行时库)和说明:

http://code.google.com/p/resthttpservice/

于 2009-01-09T00:52:13.733 回答
2

简短的回答是肯定的,你可以用 Flex 做 RESTful。您只需要解决 Flash 播放器的限制(使用最新版本更好)和包含浏览器的 HTTP 堆栈限制。

在通过 rails-esque ?_method= 方法解决了基本的 HTTP 请求标头以及缺少 PUT 和 DELETE 之后,我们在 Flex 中进行 RESTful 客户端开发已经有一年多了。也许俗气,但它可以完成工作。

我在http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html的一篇旧博客文章中注意到了一些标题的痛苦

于 2010-01-14T02:29:29.393 回答
2

Flex 对 REST 的支持充其量是很弱的。我花了很多时间构建原型,所以我知道大部分问题。如前所述,开箱即用仅支持 GET 和 POST。乍一看,您似乎可以使用 LiveCycle Data Services 或 Blaze 中的代理配置来获得对 PUT 和 DELETE 的支持。然而,它是一个骗局。来自您的 Flex 应用程序的请求仍将是 ​​POST。代理将其转换为服务器端的 PUT 或 DELETE 以欺骗您的服务器端代码。还有其他问题。听说这是 Adob​​e 所能想到的最好的方案。经过我的评估,我们决定朝另一个方向发展。

于 2010-03-10T21:31:50.573 回答
1

是的,我能够使用 POST 并通过此组件访问标头:

http://code.google.com/p/as3httpclient/wiki/Links

例子

于 2008-09-30T15:35:54.393 回答
1

我现在正在开发一个严重依赖于 Flex 和 JavaScript 以及 Java Servlet 之间的 REST 调用的应用程序。我们通过建立一个在错误时返回的 <status id="XXX" name="YYYYYY"> 块的约定来解决响应错误代码问题,错误 ID 大致映射到 HTTP 错误代码。

我们通过使用 Java Servlet 作为 HTTP 代理解决了跨站点脚本的限制。对代理的调用(它在为其余内容(包括 Flex 内容)提供服务的同一台服务器上运行,将请求发送到另一台服务器,然后将响应发送回原始调用者。

于 2008-09-30T19:29:05.393 回答
1

RestfulX解决了 Flex 的大部分/所有 REST 问题。它支持 Rails/GAE/Merb/CouchDB/AIR/WebKit,我相信将它连接到您的 Java 实现会很容易。

Dima 也将 AS3HTTPClient 库集成到其中。

看看这个!

于 2009-10-05T07:43:48.050 回答
0

实际上已经在使用带有 Rest-Style 框架的 Flex。正如 mbrevort 已经提到的那样,不能直接使用 PUT 和 DELETE 方法。相反,我们通过 POST 进行 PUT,而对于 DELETE,我们在具有 URL 参数(如 ?action=delete)的资源上使用 GET。

这不是 100% Rest 风格,所以我不确定这是否适用于 JSR 311 实现。您将需要服务器端的一些灵活性来解决 PUT 和 DELETE 限制。

关于错误处理,我们实现了错误服务。如果发生服务器端错误,Flex 应用程序可以查询此错误服务以获取实际的错误消息。这也比仅仅将 HTTP 返回码映射到静态消息灵活得多。

然而,感谢 Flex 的 ECMA 脚本,使用基于 XML 的 REST 服务非常容易。

于 2008-09-30T15:31:18.147 回答
0

REST 更像是一种意识形态。你去 REST 演示,他们有coolaide 分配器。

对于 Flex 应用程序,结合 BlazeDS 和 AMF 数据编组滚动堆栈更方便且性能更高。

于 2008-12-24T21:13:03.167 回答
0

我过去管理这个的方法是利用一个 PHP 代理来处理远程 Web 服务调用并将 RTU JSON 返回给客户端..

于 2008-12-24T22:06:10.017 回答
0

可能是新的 flex 4 是答案http://labs.adobe.com/technologies/flex4sdk/

于 2009-08-12T20:57:03.557 回答
0

Flexible Rails 》一书可能会有所帮助——它是关于如何将 Flex 用作 RESTful 客户端的极好资源。尽管它侧重于将 Flex 与 Rails 框架结合使用,但我相信这些概念适用于任何 RESTful 框架。我使用这本书来快速了解如何将 Flex 与 REST 结合使用。

于 2010-02-10T17:10:35.637 回答
0

我为富兰克林柯维做一个大型的弹性项目。我们使用 REST 服务。为了支持这一点。我们创建了一个 XMLHttpRequest 包装器。通过使用带有一些事件处理程序的外部接口。我们开源了这个库。您可以在https://github.com/FranklinCovey/AS3-XMLHttpRequest查看它

于 2012-10-25T15:58:40.877 回答