论坛首页 编程语言技术论坛

关于REST的一点想法,欢迎大家讨论。

浏览 71017 次
该帖已经被评为精华帖
作者 正文
   发表时间:2007-04-12  
很难处理动词 ? 能举个例子吗
0 请登录后投票
   发表时间:2007-04-12  
yuxie 写道

robbin以前说过REST能让代码减少到很少的程度(具体到多少忘了)。现在看来似乎有点言过其实。

REST到底能把开发简化到什么程度,我看只有经过实际开发才能证明。就好像Rails刚出来的时候叫嚣开发效率比Java高10倍,我们也都嗤之以鼻。但是随着用过Rails的人多了,有经验的人也提出了比较中肯的提高程度,并且也被大家认可了。
yuxie 写道

REST远没有想像中的那么强大。在我看来,如果采用纯REST架构的话,所谓的resource就是经过阉割的OO模型,只有属性,没有行为。为了表现这些被切掉的行为,我必须凭空再造出一个个所谓的resource来,切掉的行为越多,要造的就越多。这样的话,代码不可能有数量级的减少。

REST的优点就在于它很简单,而具体强大不强大,要看我们怎么使用。最好的东西不是最复杂最强大的,而是最简单最合适的。对REST的理解和运用程度直接影响着开发效率。这就好像OO很好,但是不是所有人都可以用好一样。
yuxie 写道

再想一下,仅仅为了漂亮的URL,放弃自然和符合人类思维习惯的OO模型,这样真的值吗。套用T1同学的话来说:辛辛苦苦几十年,一夜回到了解放前。

根据我的观点(当然不一定对哈),漂亮的url以为这漂亮的系统架构。这还不够我们追求吗?REST和OO的冲突并不大,而且OO也应该是需要一直进化的东西,而不是一个不能挑战的权威。

yuxie 写道

所以我认为,REST只是在异构系统之间的webservice通讯上有优势,其他时候,还是该匝地匝地比较好。

webservice是我能为REST想到的最后一个使用地方,绝不是第一个映入脑海的东西。webservice叫了这么久,到底有多少人乐于实现它?有人说那是因为soap太复杂,但是我觉得这个不是原因。
0 请登录后投票
   发表时间:2007-04-12  
winterwolf 写道
很难处理动词 ? 能举个例子吗

就比如说login,你要如何把它抽象成resource呢?MVC式的url一般是/login.do之类的,显示把login作为一个action来处理。如果根据REST的话,url可能是/login,那么可以说login是一个resource。一个动词变成了resource,这就不直观了。
0 请登录后投票
   发表时间:2007-04-12  
AllenYoung 写道
dennis_zane 写道

REST与Ajax的结合也是个很吸引人的话题,试想由RESTful的服务端API与客户端的ajax技术的相互调用,能够产生什么样的场景?很想听听大牛的看法。

目前我还想想不出REST加Ajax会产生什么样令人震撼的场景。REST的核心是resource,而我觉得对resource的操作最后肯定是通过传统HTTP请求发送到server端的。比如写一篇blog文章,无论如何利用Ajax,最后应该用传统的HTTP POST请求发送到server以便保存。

REST和Ajax的一个比较有趣的关系是,Ajax也许可以帮助我们解决resource难以建模的问题。就像我说过的那样,对名词的抽象很直观,但是动词就比较难办。而Ajax正好可以用来处理这些动词,同时保证url不变。当然,如何使用Ajax处理这些动词也是一个可以讨论的话题,我这里只是说有这个可能性。不过话说回来,即便使用Ajax处理动词的话,如何设计Ajax请求所发送到的url仍然是一个问题。目前来看,最可能的设计还是MVC形式的。所以一个可能的测量是:对所有名词使用REST架构,对动词尽量使用Ajax实现的MVC。这样至少可以保证url看起来是RESTful的。


我对REST中资源的理解,资源也可以看成是数据,我们对服务端的操作不外乎查询数据、增加数据等CRUD操作,而AJAX对服务端带来的改变是:服务端交给浏览器的不是内容,而将是数据。由javascript去扮演传统MVC框架中C的角色,负责数据的呈现、流程的转发和跳转。robbin说过,REST可能带来的是action的重用,我觉的很有道理,例如对应于用户加入圈子这个操作,对于管理员和申请者来说这个操作本质的工作是一样的——操作User这个资源,而成功后呈现的页面或者说结果不同,传统的MVC我们是写不同的action。现在,使用RESTful风格的服务端API来做,将只有一个传统意义上的action,而最终数据的呈现可以交给javascript。说着说着我自己都觉的不是很清晰:)
0 请登录后投票
   发表时间:2007-04-12  
dennis_zane 写道

我对REST中资源的理解,资源也可以看成是数据,我们对服务端的操作不外乎查询数据、增加数据等CRUD操作,而AJAX对服务端带来的改变是:服务端交给浏览器的不是内容,而将是数据。由javascript去扮演传统MVC框架中C的角色,负责数据的呈现、流程的转发和跳转。robbin说过,REST可能带来的是action的重用,我觉的很有道理,例如对应于用户加入圈子这个操作,对于管理员和申请者来说这个操作本质的工作是一样的——操作User这个资源,而成功后呈现的页面或者说结果不同,传统的MVC我们是写不同的action。现在,使用RESTful风格的服务端API来做,将只有一个传统意义上的action,而最终数据的呈现可以交给javascript。说着说着我自己都觉的不是很清晰:)

REST当然可以带来action的重用。实际上,理想状态的REST会把所有action都限制在一个有限的集合内,也就是CURD及其变种。这与Ajax没有关系。你所举的用户加入圈子的例子我觉得不太恰当,REST只的不是data,而是data和representation。用户要加入一个圈子,管理者批准用户的加入请求,虽然都是对同一个圈子做操作,但是这是不同的resource。
0 请登录后投票
   发表时间:2007-04-12  
AllenYoung 写道
winterwolf 写道
很难处理动词 ? 能举个例子吗

就比如说login,你要如何把它抽象成resource呢?MVC式的url一般是/login.do之类的,显示把login作为一个action来处理。如果根据REST的话,url可能是/login,那么可以说login是一个resource。一个动词变成了resource,这就不直观了。


用rest实现动词和mvc一样简单啊. 只是这个动作交给url /login 来处理. /login返回是否登录成功的信息就可以了. /login背后的处理也可以是通过mvc完成的.

可以将rest看做是一种基于url的分布处理框架 mvc是实现其中一个节点的处理框架

rest传给url未必是资源也可以是动作指令

0 请登录后投票
   发表时间:2007-04-12  
winterwolf 写道

用rest实现动词和mvc一样简单啊. 只是这个动作交给url /login 来处理. /login返回是否登录成功的信息就可以了. /login背后的处理也可以是通过mvc完成的.

可以将rest看做是一种基于url的分布处理框架 mvc是实现其中一个节点的处理框架

rest传给url未必是资源也可以是动作指令


那你这个就是mvc,只不过url和/login.do有一点儿不同。
0 请登录后投票
   发表时间:2007-04-12  
AllenYoung 写道
winterwolf 写道

用rest实现动词和mvc一样简单啊. 只是这个动作交给url /login 来处理. /login返回是否登录成功的信息就可以了. /login背后的处理也可以是通过mvc完成的.

可以将rest看做是一种基于url的分布处理框架 mvc是实现其中一个节点的处理框架

rest传给url未必是资源也可以是动作指令


那你这个就是mvc,只不过url和/login.do有一点儿不同。


是啊. rest强调无状态罢了 你不能将password username放到session里.

login的情况有点特殊 这还不是一般的动作

在rest系统里可能要将password username保存到客户端 然后每访问一个url就在数据里传 password username. 哈哈
0 请登录后投票
   发表时间:2007-04-12  
AllenYoung 写道
winterwolf 写道
很难处理动词 ? 能举个例子吗

就比如说login,你要如何把它抽象成resource呢?MVC式的url一般是/login.do之类的,显示把login作为一个action来处理。如果根据REST的话,url可能是/login,那么可以说login是一个resource。一个动词变成了resource,这就不直观了。

为何要拘泥于表面的字义,个人感觉像login可以抽象为GET /users之流,只不过写出来不直观就是了。
0 请登录后投票
   发表时间:2007-04-12  
winterwolf 写道
AllenYoung 写道
winterwolf 写道

用rest实现动词和mvc一样简单啊. 只是这个动作交给url /login 来处理. /login返回是否登录成功的信息就可以了. /login背后的处理也可以是通过mvc完成的.

可以将rest看做是一种基于url的分布处理框架 mvc是实现其中一个节点的处理框架

rest传给url未必是资源也可以是动作指令


那你这个就是mvc,只不过url和/login.do有一点儿不同。


是啊. rest强调无状态罢了 你不能将password username放到session里.

login的情况有点特殊 这还不是一般的动作

在rest系统里可能要将password username保存到客户端 然后每访问一个url就在数据里传 password username. 哈哈


这个在get操作时如何处理?
完全的无状态,是不是走向一个极端了?
0 请登录后投票
论坛首页 编程语言技术版

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