我开始的一个项目使用一个宁静的构架中实现,在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类,URLRequestURLRequestHeader和<=>之类的糖。使用这些可以组合大多数HTTP请求。

当支持除GET和POST之外的其他方法时,问题主要在于某些浏览器(例如Safari)不支持这些,并且Flash Player依赖于浏览器进行所有网络连接。

Flex有能力充当纯REST客户端的明显缺点。

以下评论来自博客

  

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

     
      
  1. 开箱即可支持GET和POST方法(除非您   使用FDS并将useProxy属性设置为   真)
  2.   
  3. 无法设置请求标头,也无法访问响应   头。因此我无法做到   访问案例中的响应正文   一个错误。
  4.   
  5. 它认为HTTPService获取其他任何200的状态代码   一个错误。 (事件201,哎!!)。该   FaultEvent <!>#8217; t提供信息   关于状态代码的任何响应   身体。 Flex客户端没有   想法出了什么问题。
  6.   

Matt Raible 也提供了关于REST的Rails,Grails,GWT和Flex的精彩演示,它们有一些很好的参考资料。

是否可行取决于您愿意通过代理等方式解决的问题。

我一直致力于完全支持REST的HTTPService组件的开源替换。如果有兴趣,您可以在这里找到测试版(源代码和/或编译的Flex共享运行时库)和说明:

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

简短的回答是肯定的,你可以用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提出的最佳选择。经过我的评估,我们决定朝另一个方向前进。

是的,我能够在此组件中使用POST和访问标头:

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

示例

我现在正在开发一个依赖于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返回给客户端。

Flexible Rails 这本书可能会有所帮助 - 它是如何使用的绝佳资源Flex作为RESTful客户端。虽然它专注于将Flex与Rails框架一起使用,但我相信这些概念适用于任何RESTful框架。我使用本书快速了解使用Flex with REST。

我为Franklin Covey开展了一个大型的灵活项目。我们使用REST服务。为了支持这一点。我们创建了一个XMLHttpRequest包装器。通过使用外部接口与一些事件处理程序。我们开源了图书馆。您可以在 https://github.com/FranklinCovey/AS3-XMLHttpRequest 上查看

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top