论坛首页 Java企业应用论坛

主流的Web MVC框架未能提供REST支持的主要原因分析

浏览 5811 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-04  
robbin以前在一篇文章中对于Struts 2.0一直未能提供很好的REST支持感到遗憾。
http://robbin.iteye.com/blog/81990
我来继续robbin的口水做一下分析。

在我的一篇blog中,我认为REST其实对于J2EE传统的三层架构是一种破坏性的架构。
http://blog.csdn.net/mozilla/archive/2007/06/02/1635127.aspx

J2EE传统的三层架构当然是非常有价值的,不过至今仍然将其当作铁律未免有些过时。如果将Web表现层前推到客户端来做,原先服务器端的Web表现层这个空缺应该由REST框架来填补。这一层是很薄的一层Facade层,我一般将它叫做资源控制层,以体现它面向资源的特点,当然也可以叫做Web服务层或者其他什么名字。它的主要作用就是形成业务层的Facade,以大粒度的资源的形式暴露出服务器端提供给客户端使用的功能。

传统的Web MVC框架未能提供很好的REST支持的一个主要的原因是它们在设计理念上存在着巨大的差异,Web MVC主要是为Thin Cient设计的,而REST主要是为Rich Client或RIA设计的。传统的Web MVC框架不可能从深层次支持一个与它们自己设计理念差别很大,而且还是替换性的架构。

单就Spring MVC来说,它完全没有计划支持REST。而Spring框架本身确实有计划来支持REST,但是仅仅是将REST当作Web服务的一种类型来支持,而不是主要用来连接同一个应用的客户端和服务器端。

http://opensource.atlassian.com/projects/spring/browse/SWS-82?rc=1&page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
http://blog.springframework.com/arjen/index.php/archives/2005/10/19/introducing-spring-web-services/
引用
We believe that the future of Web Services lies in SOAP. While other standards and implementations also focus on REST-like services, we believe that there is little value in creating a framework for these kind of Web Services. REST services seem to have very little common functionality that cannot already be captured with Java classes like the HttpServlet.

可见Spring框架的Web Service部分的开发者目前尚未对REST加以足够的重视,这是他们迟迟没有推出对于REST支持的原因。我们以前也讨论过,REST目前尚未完全被企业应用所接受,Spring框架开发者面对的主要是企业应用中的需求,目前在企业应用中对于REST还没有非常广泛的需求。不过在我看来,这种情况早晚会改变。

另外还有一个原因是,Servlet API其实与REST的一些需求是存在着矛盾的,至少不完全符合REST的需求。
http://www.restlet.org/about/introduction
Jetty的作者Greg Wilkins在2003年认为Servlet API存在以下几个问题:
Wilkins 写道
1. No clear separation between the protocol concerns and the application concerns.
2. Unable to take full advantage of the non-blocking NIO due to blocking IO assumptions.
3. Full Servlet Web containers are overkill for many applications.

并且提出有必要设计另外一套API。他还对新的API作出了一些设想:
http://blogs.webtide.com/gregw/2004/09/24/1096051860000.html
而Restlet的作者Jerome Louvel正是受到了Wilkins的影响,最终才决定完全抛开Servlet API,另外定义一套API。现在因为Louvel成为了JSR 311的核心成员,因此可以预见这个新的REST规范也不会是基于Servlet API的,就像Portlet一样。

当然,也有人认为这几个问题不是非常严重,不是已经有了一个基于Servlet API的不错的REST框架Cetia4了吗?

综合以上的原因可见,主要面向企业应用的传统的Java框架对于REST没有很好的支持,是因为他们的历史包袱比较沉重。另外Java社区门派林立,要想让各家都承认,必须要通过JCP的标准化过程,这个过程也会旷日持久。而RoR方面做事情则要敏捷的多,说拥抱REST,很快就可以大张旗鼓地做起来。
   发表时间:2007-06-05  
既是包袱,也是财富!!
不知道M$会不会说拥抱就拥抱!
看好REST。。。。
0 请登录后投票
   发表时间:2007-06-05  
离开ajax,REST在B/S架构上何以体现它的优势
0 请登录后投票
   发表时间:2007-06-05  
weiqingfei 写道
离开ajax,REST在B/S架构上何以体现它的优势


确实 离开ajax rest没法用
0 请登录后投票
   发表时间:2007-06-05  
任何东西都是由自己的使用范围的,各有各的长处和短处,没有完美的,只有适合的。
0 请登录后投票
   发表时间:2007-06-05  
winterwolf 写道
weiqingfei 写道
离开ajax,REST在B/S架构上何以体现它的优势


确实 离开ajax rest没法用


到不是说离开ajax,rest没法用,rest可以给应用程序,中间件提供服务,
我只是奇怪当初浏览器为什么只支持get,post。
0 请登录后投票
   发表时间:2007-06-05  
weiqingfei 写道
winterwolf 写道
weiqingfei 写道
离开ajax,REST在B/S架构上何以体现它的优势


确实 离开ajax rest没法用


到不是说离开ajax,rest没法用,rest可以给应用程序,中间件提供服务,
我只是奇怪当初浏览器为什么只支持get,post。


就是没法用 组织view会累死人的
0 请登录后投票
   发表时间:2007-06-05  
to winterwolf:
你看看Cetia4吧,是你用的工具不趁手还是REST确实不支持,这个需要分开考虑。
0 请登录后投票
   发表时间:2007-06-05  
dlee 写道
to winterwolf:
你看看Cetia4吧,是你用的工具不趁手还是REST确实不支持,这个需要分开考虑。


不是指单一的请求 而是集成界面.

当然也不比集成mvc的view麻烦, 我是指相对ajax来说的

在非ajax中直接用xform调用rest也是很简单的 
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics