设计RESTful的API

 一般的简单操作,基本上都能简化为一下几种

方法URL类方法备注
GET/postsindex一覧
GET/posts?key1=xxx&key2=xxxindex检索
GET/posts/createcreate作成画面取得
POST/postsstore作成
GET/posts/{:id}show取得特定资源
GET/posts/{:id}/editedit更新画面取得
PUT/posts/{:id}update更新特定资源
DELETE/posts/{:id}destroy削除特定资源

如果检索项目特别多,URL放不下的情况,最方便的做法就是直接POST

方法URL类方法备注
GET/posts/searchs/createindex检索画面
POST/posts/searchsearch

检索结果

这儿search已经是表示动作了

但是上面看起来很不RESTful,那么我们把检索条件也作为资源提交上去呢?类似于下面这种

方法URL类方法备注
GET/posts/searchs/createcreate検索画面
POST/posts/searchsstore検索条件提交
GET/posts/searchs/{:id}show检索结果

感觉很别扭,主要是检索结果这项,如果把检索条件作为资源的话,那么第三项返回的应该是特定的检索条件才对,

为什么会是posts的检索结果呢?

变通一下,如果这样呢?

方法URL类方法备注
GET/posts/searchs/createcreate検索画面
POST/posts/searchsstore検索条件提交
GET/posts?search_id=xxxshow检索结果

这样看起来还不错,不过处理起来确实麻烦了很多,如果不是有洁癖的话,直接用POST就比较好了。

对于删除多个资源的问题,也可以用同样的方法(实际上这儿本质是处理选择项,至于后续是删除还是其他处理,都没关系)。

方法URL类方法备注
POST/posts/selectionsstore选择项提交
GET/posts/selections/xxxshow取得选择项

DELETE/posts/selections/xxxdestroy删除选择的posts

上面最后一项同样不RESTful,因为按照语义,这个应该是删除的上面提交的那个选择数据,而不是具体的posts

所以最后一项也可以改成这个?

方法URL类方法备注
POST/posts/selectionsstore选择项提交
GET/posts/selections/xxxshow取得选择项

DELETE/posts?selection_id=xxxdestroy删除选择的posts

实际上,对于普通的多页面系统,只能用GET和POST方法,那么其他方法要么就放到URL里,要么就放到Form的字段里。

而且,GET以外的所有方法,其实都是POST,所以,对于DELETE其实最终还是POST,那么就直接用POST好了

方法URL类方法备注

POST

(用form项目标识为DELETE)

/postsdestroy删除选择的posts

相关推荐