锁定老帖子 主题:Restful让我束手束脚
精华帖 (1) :: 良好帖 (4) :: 新手帖 (9) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-09
有否違反RESTful,本來就是學術上的問題嘛。REST只是統一接口。而HTTP下的四個method(GET/PUT/DELETE/POST),各有特定語意。一個resource配合四種操作,須按語意而行,不做令人意想不到之事。GET只是取出一項或多項resource,完全不會改變任何resource。PUT只是將一項resource覆寫。DELETE將一項resource刪去。上列三者,只要參數不變,無論執行一次或一千次,結果都是一樣。而POST,整體上會改變resource,在Rails就用來建立一項新resource。與其他method不同,執行一次創一項,一千次創一千項。
亦至於接口後的東西放在何處,悉隨尊便,不在REST/ROA之內。所以,不必有此擔心。 實作上,我比較愛將search都放入controller的index method之內,使用query string去分辨限制,就省去一route,亦符合REST GET的語意。 至於有說Search controller,除非我打算作一個跨越多個resource的search,否則都不必另立controller。 |
|
返回顶楼 | |
发表时间:2008-12-10
author作为article的一个属性,是属于one-to-many的关联关系,在录入一篇article的时候,应该有一个预装载author的动作(可以是通过遍历author资源来select,或者是search出唯一的author,当然如果该author不存在的情况需要在级联保存中save一个),然后在录入的方法里面级联保存,在Spring中SimpleFormController里的referenceData()就是作这个用的。
|
|
返回顶楼 | |
发表时间:2008-12-10
我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。
|
|
返回顶楼 | |
发表时间:2008-12-10
BirdGu 写道 我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。
我觉得restful的资源在rails应该理解为 1个页面+一个控制器+若干个model,和单个的model最多几毛钱的关系 |
|
返回顶楼 | |
发表时间:2008-12-11
BirdGu 写道 我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。
严重同意,资源应该跟响应的调用方(使用者)关联,毕竟rails不是纯净的rich client解决方案(纯净的就是后台传输数据,前台接受显示,flex就是如此,目前ajax还是会出现后台生成htmlorjs代码),so。。。。。。目前的resource是与view有点紧耦合的 |
|
返回顶楼 | |
发表时间:2008-12-15
最后修改:2008-12-15
Omnibus 写道 實作上,我比較愛將search都放入controller的index method之內,使用query string去分辨限制,就省去一route,亦符合REST GET的語意。
非常赞同,search是index的子集,URI应该定位在集合资源上。 像: <form action="/authors" method="GET"> <input type="text" name="keyword" /> <input type="submit" /> </form> 或者: /authors?keyword=xxx 有些人认为这样就不Restful了, 不知他们为什么这么讨厌URI中的那个问号, 好像Restful就是要把这个问号去掉似的, 这个问号本身就是URI协议的一部分,它是GET的状态语义。 |
|
返回顶楼 | |
发表时间:2008-12-20
最后修改:2008-12-20
偶问一个弱弱的问题, 我在做一个购物网站, 然后每个商品有一个 编号, 当然这个编号是不能重复的。 然后我验证一个商品的时候,是不是差不多这样呀?
URL是: /items/178/validate_sn POST的数据可能是: sn: SX00078 这样可以吗? 因为 GET POST DELETE 都被我用光了, 不够用了,如果不够用了该怎么办呢? 比如我还有一个批量添加商品的,我是这样组织的: /items/batch_new // PS:暂时不管英语合不合理呀 因为“资源”,我可以用URL组织起来, 但是四种操作往往不够用, 这时候比较好的做好是怎么样的呢? 我有两种,不知道哪种更合理: 1. 就是上面的例子, 把操作加到后面 2. 把操作加到 _method post 变量中, 模拟 POST DELETE, 我现在是用了第一种, 因为我发现也挺直观和方便的. 而且也和这样的URL统一 items/new items/123/edit 谢谢大侠们指导 |
|
返回顶楼 | |
发表时间:2008-12-22
如果用概念,validation根本不該用POST。validation本身並不會改變object的狀態,你只要用get就可以。
用Rails角度看,你可以將validation換object來看,就不會有此困局。 GET /items/178/validation/SX00078 bencode 写道 偶问一个弱弱的问题, 我在做一个购物网站, 然后每个商品有一个 编号, 当然这个编号是不能重复的。 然后我验证一个商品的时候,是不是差不多这样呀?
URL是: /items/178/validate_sn POST的数据可能是: sn: SX00078 这样可以吗? 因为 GET POST DELETE 都被我用光了, 不够用了,如果不够用了该怎么办呢? 比如我还有一个批量添加商品的,我是这样组织的: /items/batch_new // PS:暂时不管英语合不合理呀 因为“资源”,我可以用URL组织起来, 但是四种操作往往不够用, 这时候比较好的做好是怎么样的呢? 我有两种,不知道哪种更合理: 1. 就是上面的例子, 把操作加到后面 2. 把操作加到 _method post 变量中, 模拟 POST DELETE, 我现在是用了第一种, 因为我发现也挺直观和方便的. 而且也和这样的URL统一 items/new items/123/edit 谢谢大侠们指导 |
|
返回顶楼 | |
发表时间:2008-12-22
Omnibus 写道 如果用概念,validation根本不該用POST。validation本身並不會改變object的狀態,你只要用get就可以。
用Rails角度看,你可以將validation換object來看,就不會有此困局。 GET /items/178/validation/SX00078 bencode 写道 偶问一个弱弱的问题, 我在做一个购物网站, 然后每个商品有一个 编号, 当然这个编号是不能重复的。 然后我验证一个商品的时候,是不是差不多这样呀?
URL是: /items/178/validate_sn POST的数据可能是: sn: SX00078 这样可以吗? 因为 GET POST DELETE 都被我用光了, 不够用了,如果不够用了该怎么办呢? 比如我还有一个批量添加商品的,我是这样组织的: /items/batch_new // PS:暂时不管英语合不合理呀 因为“资源”,我可以用URL组织起来, 但是四种操作往往不够用, 这时候比较好的做好是怎么样的呢? 我有两种,不知道哪种更合理: 1. 就是上面的例子, 把操作加到后面 2. 把操作加到 _method post 变量中, 模拟 POST DELETE, 我现在是用了第一种, 因为我发现也挺直观和方便的. 而且也和这样的URL统一 items/new items/123/edit 谢谢大侠们指导 对于用户或者物品的验证,我们不应该将验证作为一个action,准确的说,可信任的用户或者商品本身就是一项资源,而实际对可信用户或者商品的验证的实质就是get可信用户或者商品,因此大致URL可以如下: /user/auth/12345 如果无法获得12345这个可信的用户,那么实际就是证明该用户不可信任。 这里的重点是将可信用户作为一个资源抽象,这样我能过获得就是通过验证,无法获得就不是可信用户,而不是把验证作为一个action。 |
|
返回顶楼 | |