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

Restful让我束手束脚

浏览 14894 次
精华帖 (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。
0 请登录后投票
   发表时间:2008-12-10  
author作为article的一个属性,是属于one-to-many的关联关系,在录入一篇article的时候,应该有一个预装载author的动作(可以是通过遍历author资源来select,或者是search出唯一的author,当然如果该author不存在的情况需要在级联保存中save一个),然后在录入的方法里面级联保存,在Spring中SimpleFormController里的referenceData()就是作这个用的。
0 请登录后投票
   发表时间:2008-12-10  
我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。
0 请登录后投票
   发表时间:2008-12-10  
BirdGu 写道
我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。


我觉得restful的资源在rails应该理解为 1个页面+一个控制器+若干个model,和单个的model最多几毛钱的关系
0 请登录后投票
   发表时间:2008-12-11  
BirdGu 写道
我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。

严重同意,资源应该跟响应的调用方(使用者)关联,毕竟rails不是纯净的rich client解决方案(纯净的就是后台传输数据,前台接受显示,flex就是如此,目前ajax还是会出现后台生成htmlorjs代码),so。。。。。。目前的resource是与view有点紧耦合的
0 请登录后投票
   发表时间: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的状态语义。
3 请登录后投票
   发表时间: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

谢谢大侠们指导
0 请登录后投票
   发表时间: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

谢谢大侠们指导

0 请登录后投票
   发表时间: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。
0 请登录后投票
论坛首页 编程语言技术版

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