锁定老帖子 主题:rails作者DHH谈及REST
精华帖 (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之后。 至于这样的拆分,是更清晰了,还是更加混乱了,这就是仁者见仁,智者见智的事情了。 |
|
返回顶楼 | |
发表时间:2007-04-05
dongbin 写道 REST is a kind of tech to implement Webservice.
是 但是很概念 具体如何做还不很清晰.唯一明确的就是对ajax类客户端的肯定. 服务端如何做没有官方WS那样明确的规划.还需要探讨 |
|
返回顶楼 | |
发表时间: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 这样不是更简单更现实吗? 我的理解, 一个普通的html请求是一棵树, REST的请求是树枝, WS是叶子。 当然,最终,要的都是叶子。 |
|
返回顶楼 | |
发表时间: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> 究竟哪个方式好 ? |
|
返回顶楼 | |
发表时间:2007-04-05
那个方式好仅仅从服务内部是看不出来的.
当ws互相调用的时候可能差别就很大.也许是多url方便也许是一个url方便 但是有一点可以肯定就是多URL便于测试. |
|
返回顶楼 | |
发表时间: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中操作是支持的,内容形式的话估计还是要靠自己来判断,我想服务器端的测试,应该没有增加难度。 |
|
返回顶楼 | |
发表时间:2007-04-05
rest确实是放在head里 这个方法也许只对不擅长处理xml的开发框架简单
其实用xslt或者直接用xquery即可对xml中的动作进行判断. 多数人不熟悉cocoon ops这样的框架所以认为这么做复杂. |
|
返回顶楼 | |
发表时间:2007-04-05
winterwolf 写道 rest确实是放在head里 这个方法也许只对不擅长处理xml的开发框架简单
我觉得这个和xml应该扯不上什么关系。其实用xslt或者直接用xquery即可对xml中的动作进行判断. 多数人不熟悉cocoon ops这样的框架所以认为这么做复杂. 动作这个东西,可以放在任何地方,以任何形式表现。只要接收端能正确解析就可以。 rest只不过应用了http所支持东西来做,从形式上更加简练。 |
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2007-04-05
winterwolf 写道 rest在读完head后一样还是要解析xml读数据啊 简单在那里?
普通的请求,哪里有xml什么事情? |
|
返回顶楼 | |