一般的简单操作,基本上都能简化为一下几种
方法 | URL | 类方法 | 备注 |
GET | /posts | index | 一覧 |
GET | /posts?key1=xxx&key2=xxx | index | 检索 |
GET | /posts/create | create | 作成画面取得 |
POST | /posts | store | 作成 |
GET | /posts/{:id} | show | 取得特定资源 |
GET | /posts/{:id}/edit | edit | 更新画面取得 |
PUT | /posts/{:id} | update | 更新特定资源 |
DELETE | /posts/{:id} | destroy | 削除特定资源 |
如果检索项目特别多,URL放不下的情况,最方便的做法就是直接POST
方法 | URL | 类方法 | 备注 |
GET | /posts/searchs/create | index | 检索画面 |
POST | /posts/search | search | 检索结果 这儿search已经是表示动作了 |
但是上面看起来很不RESTful,那么我们把检索条件也作为资源提交上去呢?类似于下面这种
方法 | URL | 类方法 | 备注 |
GET | /posts/searchs/create | create | 検索画面 |
POST | /posts/searchs | store | 検索条件提交 |
GET | /posts/searchs/{:id} | show | 检索结果 |
感觉很别扭,主要是检索结果这项,如果把检索条件作为资源的话,那么第三项返回的应该是特定的检索条件才对,
为什么会是posts的检索结果呢?
变通一下,如果这样呢?
方法 | URL | 类方法 | 备注 |
GET | /posts/searchs/create | create | 検索画面 |
POST | /posts/searchs | store | 検索条件提交 |
GET | /posts?search_id=xxx | show | 检索结果 |
这样看起来还不错,不过处理起来确实麻烦了很多,如果不是有洁癖的话,直接用POST就比较好了。
对于删除多个资源的问题,也可以用同样的方法(实际上这儿本质是处理选择项,至于后续是删除还是其他处理,都没关系)。
方法 | URL | 类方法 | 备注 |
POST | /posts/selections | store | 选择项提交 |
GET | /posts/selections/xxx | show | 取得选择项 |
DELETE | /posts/selections/xxx | destroy | 删除选择的posts |
上面最后一项同样不RESTful,因为按照语义,这个应该是删除的上面提交的那个选择数据,而不是具体的posts
所以最后一项也可以改成这个?
方法 | URL | 类方法 | 备注 |
POST | /posts/selections | store | 选择项提交 |
GET | /posts/selections/xxx | show | 取得选择项 |
DELETE | /posts?selection_id=xxx | destroy | 删除选择的posts |
实际上,对于普通的多页面系统,只能用GET和POST方法,那么其他方法要么就放到URL里,要么就放到Form的字段里。
而且,GET以外的所有方法,其实都是POST,所以,对于DELETE其实最终还是POST,那么就直接用POST好了
方法 | URL | 类方法 | 备注 |
POST (用form项目标识为DELETE) | /posts | destroy | 删除选择的posts |