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

rails作者DHH谈及REST

浏览 19888 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-05  
winterwolf 写道
weiqingfei 写道

rest提倡的一个观点就是uri的唯一性,对于同一内容的不同形式,以及不同动作都是通过同一个uri来完成的。把传统用uri来标识的动作,用html的head来标识。


这正是我不理解的地方. 比如order.com是一个定单服务 那么所有对定单的操作都要用一个URL! 仅仅对一个定单的操作可以仅仅用save delete update 但是如果对全部定单进行备份和查询怎么办 ?

很多服务都被荫藏在url之后 这样rest还是会变的越来越复杂 最后变成官方的ws.

一旦服务被荫蔽在url之后 其它人就很难了结服务的内容及如何调用服务. 为什么不用url来表示资源和操作用guessorder.save allorder.backup 这样不是更简单更现实吗?     


这儿的唯一性,不是绝对的唯一性,而是一种相对的唯一性。
对于操作,它只是抽象出经常用的4大类,分布在这4大类里的更细小的颗粒,还是要用url的方式(或者其它传统方式)来实现了。

由于head的局限性,不大可能把所有的服务都隐蔽在url之后。

至于这样的拆分,是更清晰了,还是更加混乱了,这就是仁者见仁,智者见智的事情了。

0 请登录后投票
   发表时间:2007-04-05  
dongbin 写道
REST is a kind of tech to implement Webservice.


是 但是很概念 具体如何做还不很清晰.唯一明确的就是对ajax类客户端的肯定.

服务端如何做没有官方WS那样明确的规划.还需要探讨
0 请登录后投票
   发表时间:2007-04-05  
dongbin 写道
winterwolf 写道
weiqingfei 写道

rest提倡的一个观点就是uri的唯一性,对于同一内容的不同形式,以及不同动作都是通过同一个uri来完成的。把传统用uri来标识的动作,用html的head来标识。


这正是我不理解的地方. 比如order.com是一个定单服务 那么所有对定单的操作都要用一个URL! 仅仅对一个定单的操作可以仅仅用save delete update 但是如果对全部定单进行备份和查询怎么办 ?

很多服务都被荫藏在url之后 这样rest还是会变的越来越复杂 最后变成官方的ws.

一旦服务被荫蔽在url之后 其它人就很难了结服务的内容及如何调用服务. 为什么不用url来表示资源和操作用guessorder.save allorder.backup 这样不是更简单更现实吗?     
REST is a kind of tech to implement Webservice.


我的理解,

一个普通的html请求是一棵树,
REST的请求是树枝,
WS是叶子。

当然,最终,要的都是叶子。
0 请登录后投票
   发表时间:2007-04-05  
weiqingfei 写道

这儿的唯一性,不是绝对的唯一性,而是一种相对的唯一性。
对于操作,它只是抽象出经常用的4大类,分布在这4大类里的更细小的颗粒,还是要用url的方式(或者其它传统方式)来实现了。

由于head的局限性,不大可能把所有的服务都隐蔽在url之后。

至于这样的拆分,是更清晰了,还是更加混乱了,这就是仁者见仁,智者见智的事情了。


看来这只有借助具体实践来检验了

如果用url来指定ws的操作可以让xml中不包括具体的动作 order.com/order.save
<order>
<guessinfo/>
<goods/>
<参数>
<目标数据>/xmldb/order</目标数据>
......其它的比如 我们常用的?后面的paramater
</参数>
<order>

如果要用一个url来处理所有ws的操作那么就必需给xml加上动作指令 server端也必需做判断 order.com/order
<order>
<guessinfo/>
<goods/>
<参数/>
<动作>save</动作>
<order>

究竟哪个方式好 ?
0 请登录后投票
   发表时间:2007-04-05  
那个方式好仅仅从服务内部是看不出来的.

当ws互相调用的时候可能差别就很大.也许是多url方便也许是一个url方便

但是有一点可以肯定就是多URL便于测试.
0 请登录后投票
   发表时间:2007-04-05  
winterwolf 写道
weiqingfei 写道

这儿的唯一性,不是绝对的唯一性,而是一种相对的唯一性。
对于操作,它只是抽象出经常用的4大类,分布在这4大类里的更细小的颗粒,还是要用url的方式(或者其它传统方式)来实现了。

由于head的局限性,不大可能把所有的服务都隐蔽在url之后。

至于这样的拆分,是更清晰了,还是更加混乱了,这就是仁者见仁,智者见智的事情了。


看来这只有借助具体实践来检验了

如果用url来指定ws的操作可以让xml中不包括具体的动作 order.com/order.save
<order>
<guessinfo/>
<goods/>
<参数>
<目标数据>/xmldb/order</目标数据>
......其它的比如 我们常用的?后面的paramater
</参数>
<order>

如果要用一个url来处理所有ws的操作那么就必需给xml加上动作指令 server端也必需做判断 order.com/order
<order>
<guessinfo/>
<goods/>
<参数/>
<动作>save</动作>
<order>

究竟哪个方式好 ?


对于WS是这个样子的。

但是对于rest,动作不是放在数据区的,而是放在了head里面。
get,post,put,delete是http很早就有的,但是为什么以前都是用get,post,很少关注put,delete呢?
因为现有浏览器很难支持。
现在开始关注rest,我想也是由于ajax所带动起来的,因为xmlhttprequest可以随意指定请求方式。
以前靠的是解析你的url来判断动作,现在只不过靠的请求方式来判断动作。

哪个方式好,我不敢妄言。

至于难以测试,客户端,ajax本来就难以测试,多加一个也无妨。

服务器端,我没有用过ror,不知道是怎么解析下发的,java的servlet对4中操作是支持的,内容形式的话估计还是要靠自己来判断,我想服务器端的测试,应该没有增加难度。
0 请登录后投票
   发表时间:2007-04-05  
rest确实是放在head里 这个方法也许只对不擅长处理xml的开发框架简单

其实用xslt或者直接用xquery即可对xml中的动作进行判断.

多数人不熟悉cocoon ops这样的框架所以认为这么做复杂.
0 请登录后投票
   发表时间:2007-04-05  
winterwolf 写道
rest确实是放在head里 这个方法也许只对不擅长处理xml的开发框架简单

其实用xslt或者直接用xquery即可对xml中的动作进行判断.

多数人不熟悉cocoon ops这样的框架所以认为这么做复杂.
我觉得这个和xml应该扯不上什么关系。
动作这个东西,可以放在任何地方,以任何形式表现。只要接收端能正确解析就可以。

rest只不过应用了http所支持东西来做,从形式上更加简练。
0 请登录后投票
   发表时间:2007-04-05  
rest在读完head后一样还是要解析xml读数据啊 简单在那里?

将动作放到xml好处就多了

<acts>
<act url="sv1">
保存定单
<go>sv2</go>
<act>

<act url="sv2">
备份定单
<go>sv3</go>
<act>

<act url="sv3">
发货单
<go>end</go>
<act>

<acts>
0 请登录后投票
   发表时间:2007-04-05  
winterwolf 写道
rest在读完head后一样还是要解析xml读数据啊 简单在那里?

普通的请求,哪里有xml什么事情?
0 请登录后投票
论坛首页 编程语言技术版

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