【发布时间】:2010-09-14 06:47:30
【问题描述】:
我正在使用用 Java 实现的 Restful 架构开始一个项目(使用新的 JAX-RS 标准)
我们计划使用 Flex 应用程序开发 GUI。我已经发现使用 HTTPService 组件的这个实现存在一些问题(响应错误代码、标头访问...)。
你们中的任何人都有类似项目的经验。可行吗?
【问题讨论】:
标签: java apache-flex rest
我正在使用用 Java 实现的 Restful 架构开始一个项目(使用新的 JAX-RS 标准)
我们计划使用 Flex 应用程序开发 GUI。我已经发现使用 HTTPService 组件的这个实现存在一些问题(响应错误代码、标头访问...)。
你们中的任何人都有类似项目的经验。可行吗?
【问题讨论】:
标签: java apache-flex rest
这里的问题是,很多围绕这个问题的网络讨论都是一年或更长时间。我现在正在做同样的研究,这就是我今天学到的。
Jorge Rasillo 和 Mike Burr 的 IBM Developer Works article from August 2008 展示了如何制作 Flex 前端/RESTful 后端应用程序(PHP 和 Groovy 中的示例)。不错的文章。无论如何,这是要点:
// 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。
所以,我进一步挖掘并找到了这个post and discussion with Don Box(最初的 SOAP 家伙之一)。显然这是一种相当标准的行为,因为某些浏览器等不支持 PUT 和 DELETE,并且是一种已经存在一段时间的解决方法。这是一个 sn-p,但还有更多的讨论。
“如果我正在构建一个 GData 客户端,我真的想知道为什么我会费心使用 DELETE 和 PUT 方法,因为 X-HTTP-Method-Override 将在更多情况/部署中工作。”
我从中得出的结论是,如果您的 Web 端支持此 X-Method-Override 标头,那么您可以使用这种方法。 Don Box cmets 让我觉得它得到了很好的支持,但我还没有证实这一点。
另一个问题是关于能够读取 HTTP 响应标头。同样,从a blog post in 2007 by Nathan de Vries,我们看到了这个讨论。他用自己的评论跟进了那篇博文和讨论:
“Web 前端的唯一变化是 Flash Player 的较新版本(当然是 Flex 3 测试版提供的那些)现在支持 HTTPStatusEvent 实例的 responseHeaders 属性。”
我希望这意味着它现在不是问题。
【讨论】:
正如许多人指出的那样,HTTPService 有点简单,并没有做你想做的所有事情。然而,HTTPService 只是 flash.net.* 类(如 URLLoader、URLRequest 和 URLRequestHeader)之上的糖。使用这些,您可以组装大多数 HTTP 请求。
当涉及到对 GET 和 POST 之外的其他方法的支持时,问题主要在于某些浏览器(例如 Safari)不支持这些,而 Flash Player 的所有网络都依赖于浏览器。
【讨论】:
Flex 作为纯 RESTful 客户端的能力存在明显的缺陷。
下面的cmets来自这个blog:
问题是 HTTPService 类有 几个主要限制:
- 开箱即用仅支持 GET 和 POST 方法(除非您 使用 FDS 并将 useProxy 属性设置为 真的)
- 无法设置请求标头并且无法访问响应 标题。因此我无法 访问案例中的响应正文 的错误。
- 它认为 HTTPService 得到一个状态码是 200 以外的任何值 一个错误。 (事件 201,哎哟!!)。这 FaultEvent 不提供信息 关于状态码任何响应 身体。 Flex 客户端将没有 知道出了什么问题。
Matt Raible 还提供了一个nice presentation on REST with Rails, Grails, GWT and Flex,其中链接了一些很好的参考资料。
这是否可行取决于您愿意通过代理等工作的程度。
【讨论】:
我一直致力于开发完全支持 REST 的 HTTPService 组件的开源替代品。如果有兴趣,您可以在此处找到测试版(源代码和/或编译后的 Flex 共享运行时库)和说明:
【讨论】:
简短的回答是肯定的,您可以使用 Flex 实现 RESTful。您只需要解决 Flash 播放器的限制(使用最新版本更好)和包含浏览器的 HTTP 堆栈限制。
在通过 rails-esque ?_method= 方法解决了基本的 HTTP 请求标头以及缺少 PUT 和 DELETE 问题后,我们已经在 Flex 中进行 RESTful 客户端开发一年多了。也许俗气,但它可以完成工作。
我在 http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html 的一篇旧博客文章中注意到了一些标题问题
【讨论】:
Flex 对 REST 的支持充其量是很弱的。我花了很多时间构建原型,所以我知道大部分问题。如前所述,开箱即用仅支持 GET 和 POST。乍一看,您似乎可以使用 LiveCycle Data Services 或 Blaze 中的代理配置来获得对 PUT 和 DELETE 的支持。然而,它是一个骗局。来自您的 Flex 应用程序的请求仍将是 POST。代理将其转换为服务器端的 PUT 或 DELETE 以欺骗您的服务器端代码。还有其他问题。听说这是 Adobe 所能想到的最好的。经过我的评估,我们决定朝另一个方向前进。
【讨论】:
【讨论】:
我现在正在开发一个严重依赖于 Flex 与 JavaScript 和 Java Servlet 之间的 REST 调用的应用程序。我们通过建立一个在错误时返回的
我们通过使用 Java Servlet 作为 HTTP 代理解决了跨站点脚本的限制。对代理的调用(它在为其余内容(包括 Flex 内容)提供服务的同一台服务器上运行,将请求发送到其他服务器,然后将响应发送回原始调用者。
【讨论】:
RestfulX 解决了 Flex 的大部分/所有 REST 问题。它支持 Rails/GAE/Merb/CouchDB/AIR/WebKit,我相信将它连接到您的 Java 实现会很容易。
Dima 也将 AS3HTTPClient 库集成到其中。
看看吧!
【讨论】:
实际上已经在使用带有 Rest-Style 框架的 Flex。正如 mbrevort 已经提到的那样,不能直接使用 PUT 和 DELETE 方法。相反,我们通过 POST 执行 PUT,而对于 DELETE,我们使用 GET 对具有 URL 参数(如 ?action=delete)的资源。
这不是 100% Rest 风格,所以我不确定这是否适用于 JSR 311 实现。您需要在服务器端具有一定的灵活性来解决 PUT 和 DELETE 限制。
关于错误处理,我们实施了错误服务。如果发生服务器端错误,Flex 应用程序可以查询此错误服务以获取实际的错误消息。这也比仅仅将 HTTP 返回码映射到静态消息灵活得多。
不过,感谢 Flex 的 ECMA 脚本,使用基于 XML 的 REST 服务非常容易。
【讨论】:
REST 更像是一种意识形态。你去参加 REST 演示,他们有coolaide 分配器。
对于 Flex 应用,滚动堆栈与 BlazeDS 和 AMF 数据编组结合使用更方便、性能更高。
【讨论】:
我过去的管理方式是使用 PHP 代理来处理远程 Web 服务调用并将 RTU JSON 返回给客户端..
【讨论】:
可能是新的 flex 4 是答案http://labs.adobe.com/technologies/flex4sdk/
【讨论】:
Flexible Rails 这本书可能会有所帮助——它是关于如何将 Flex 用作 RESTful 客户端的极好资源。尽管它侧重于将 Flex 与 Rails 框架结合使用,但我相信这些概念适用于任何 RESTful 框架。我使用这本书来快速了解如何将 Flex 与 REST 结合使用。
【讨论】:
我为富兰克林柯维从事一个大型的弹性项目。我们使用 REST 服务。为了支持这一点。我们创建了一个 XMLHttpRequest 包装器。通过使用带有一些事件处理程序的外部接口。我们开源了这个库。你可以在https://github.com/FranklinCovey/AS3-XMLHttpRequest查看它
【讨论】: