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