这是可行的,以创建一个休息的客户用Flex?
-
03-07-2019 - |
题
我开始的一个项目使用一个宁静的构架中实现,在Java(使用新的贾克斯-RS标准)
我们正计划发展的GUI Flex应用程序。我已经发现了一些问题与这一执行使用httpservice组件(应答错误代码头访问...).
你们有一些经验,在一个类似的项目。这是可行的?
解决方案
这里的问题是,很多网页的讨论围绕这一问题是一年或更老了。我的工作,通过这个同样的研究,现在,这是什么我学到今天。
此 IBM的开发工作的文章,从2008年八月 由豪尔赫*Rasillo和麦克伯演示如何做一个Flex前结束/Rest后端程序(例PHP和时髦).不错的文章。无论如何,这里的带走:
- 他们PHP/常规码 使用,并期望 放和删除。
- 但Flex码有用的职位,但设置HTTP头X方法的复盖删除(你可以做同样的把我猜).
- 注意,这是 不 代理方法上所讨论的。
// 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网服务器,拦截并解释"后删除"作为一个删除。
因此,我挖出进一步和发现了这个 后和讨论与不箱 (一原肥皂人).显然,这是一个相当标准的行为,因为某些浏览器,等等。不支持把和删除,而是一个工作周围已经存在一段时间。这里有一个片段,但还有更多的讨论。
"如果我们建设一个客户也会因,我真的不知道为什么我会打扰使用删除并放的方法在所有鉴于X-HTTP方法复盖的是要工作,在更多的案件/部署。"
我从这是如果你网络侧支持这X方法的复盖头,然后你可以用这种方法。不框评论使我认为这是相当好的支持,但是我还没确认呢
另一个问题围绕能够阅读HTTP response headers.再次,从 一个博客后,在2007年由Nathan de Vries, 我们看到这个讨论。他跟进这篇博客和讨论与他自己的评论意见:
"只有改变在网的前面是,新版本的Flash Player(肯定那些供应有Flex beta3)现在,支持responseHeaders财产的实例HTTPStatusEvent."
我希望这意味着这是一个非的问题。
其他提示
正如许多人所指出的那样HTTPService
有点简单,并没有做你想做的所有事情。但是,flash.net.*
只是URLLoader
类,URLRequest
,URLRequestHeader
和<=>之类的糖。使用这些可以组合大多数HTTP请求。
当支持除GET和POST之外的其他方法时,问题主要在于某些浏览器(例如Safari)不支持这些,并且Flash Player依赖于浏览器进行所有网络连接。
Flex有能力充当纯REST客户端的明显缺点。
以下评论来自博客:
问题是HTTPService类有的 几个主要限制:
- 开箱即可支持GET和POST方法(除非您 使用FDS并将useProxy属性设置为 真)
- 无法设置请求标头,也无法访问响应 头。因此我无法做到 访问案例中的响应正文 一个错误。
- 它认为HTTPService获取其他任何200的状态代码 一个错误。 (事件201,哎!!)。该 FaultEvent <!>#8217; t提供信息 关于状态代码的任何响应 身体。 Flex客户端没有 想法出了什么问题。
醇>
Matt Raible 也提供了关于REST的Rails,Grails,GWT和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
对REST的Flex支持最多也很弱。我花了很多时间来构建原型,所以我知道大部分问题。如前所述,开箱即用只支持GET和POST。乍一看,似乎您可以使用LiveCycle Data Services或Blaze中的代理配置来获得对PUT和DELETE的支持。然而,这是一个骗局。来自您的Flex应用程序的请求仍然是POST。代理将其转换为服务器端的PUT或DELETE以欺骗服务器端代码。还有其他问题。人们听说这是Adobe提出的最佳选择。经过我的评估,我们决定朝另一个方向前进。
我现在正在开发一个依赖于Flex和JavaScript以及Java Servlets之间的REST调用的应用程序。我们通过建立<!> lt; status id = <!>“XXX <!>”的约定来解决响应错误代码问题。命名= QUOT <!>; YYYYYY QUOT <!>; <!> GT;错误时返回的块,错误ID大致映射到HTTP错误代码。
我们通过将Java Servlet用作HTTP代理来解决跨站点脚本限制。对代理的调用(在服务于其余内容的同一服务器上运行,包括Flex内容,将请求发送到其他服务器,然后将响应发送回原始调用者。
RestfulX 解决了大部分/全部问题Flex的REST问题。它支持Rails / GAE / Merb / CouchDB / AIR / WebKit,我相信将它连接到Java实现会很容易。
Dima还将AS3HTTPClient库集成到其中。
看看吧!
实际上已经在使用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脚本编写非常容易。
REST更像是一种意识形态而非任何东西。你去REST演示,他们有coolaide掌柜。
对于Flex应用程序,将堆栈与BlazeDS和AMF数据编组一起滚动更方便,性能更高。
我过去管理这种方式的方法是利用处理远程Web服务调用的PHP代理并将RTU JSON返回给客户端。
可能是新的flex 4是答案 http://labs.adobe.com/technologies / flex4sdk /
Flexible Rails 这本书可能会有所帮助 - 它是如何使用的绝佳资源Flex作为RESTful客户端。虽然它专注于将Flex与Rails框架一起使用,但我相信这些概念适用于任何RESTful框架。我使用本书快速了解使用Flex with REST。
我为Franklin Covey开展了一个大型的灵活项目。我们使用REST服务。为了支持这一点。我们创建了一个XMLHttpRequest包装器。通过使用外部接口与一些事件处理程序。我们开源了图书馆。您可以在 https://github.com/FranklinCovey/AS3-XMLHttpRequest 上查看