我正在使用Java实现的Restful架构开始一个项目(使用新的JAX-RS标准)
我们计划使用Flex应用程序开发GUI.我已经使用HTTPService组件(响应错误代码,标头访问...)发现了这个实现的一些问题.
你们中的任何人都有类似项目的经验.这可行吗?
这里的问题是围绕这个问题的很多网络讨论都是一年或更久.我现在正在进行同样的研究,这就是我今天所学到的.
此IBM开发工作从2008年8月的文章由豪尔赫Rasillo和迈克·伯尔展示了如何做一个Flex前端/ REST风格的后端应用程序(在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年的博客文章中,我们看到了这个问题.他根据自己的评论跟进了博客文章和讨论:
"网络方面的唯一变化是Flash Player的新版本(当然是随Flex 3 beta提供的那些版本)现在支持HTTPStatusEvent实例上的responseHeaders属性."
我希望这意味着它现在不是问题.
正如许多人所指出的那样HTTPService
有点简单,并没有做你想做的所有事情.然而,HTTPService
只是在flash.net.*
类之上的糖URLLoader
,URLRequest
和URLRequestHeader
.使用这些可以组合大多数HTTP请求.
当谈到支持除GET和POST之外的其他方法时,问题主要在于某些浏览器(例如Safari)不支持这些,并且Flash Player依赖于浏览器来实现其所有网络.
Flex作为纯RESTful客户端的能力存在明显的缺点.
以下评论来自此博客:
问题是HTTPService类有几个主要限制:
开箱即用支持GET和POST方法(除非您使用FDS并将useProxy属性设置为true)
无法设置请求标头,也无法访问响应标头.因此,如果出现错误,我无法访问响应正文.
HTTPService获取其他任何200的状态代码,它会考虑错误.(事件201,哎!!).FaultEvent不提供有关任何响应主体的状态代码的信息.Flex客户端不知道出了什么问题.
Matt Raible还提供了关于REST与Rails,Grails,GWT和Flex的精彩演示,其中有一些很好的参考资料.
是否可行取决于您愿意通过代理等方式解决的问题.