RESTful API设计中如何实现批量操作?比如一次请求删除N个ID,类似ElasticSearch中bulk那种设计。
批量操作主要是js的操作,获取多个id后用ajax把id集合发送给一个action,具体操作写在action中。
举个例子,routes可以这样写
resources :shops do
collection do
post :association_shops
end
end
参考鬼佬对批量操作的RESTFUL的处理方案,我调整了一下,方案如下:
POST /post
// Creates a new post!
GET /post/1
// Returns a single post!
PUT /post/1
// Updates a post that exists!
DELETE /post/1
// Deletes a post that exists!
GET /posts
// Returns a list of all posts available!
POST /posts
Body: {'delete':[1,2,3,4,5,10,42,68,99]}
POST /posts
Body: {'update':{1:{title:'My new title!'},2:{author:'Walter White'}}}
POST /posts
Body: {'create':[{name:'New post!',body:'Some stuff..'},{name:'Another...',body:'This is nifty!'}]}
15 回答8.4k 阅读
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
设计方法有很多种,借用Backbone.js 的说法:There's More Than One Way To Do It,不要太纠结。
简单的说,下面几种都不错:
GET /ec2/instance/batch?id=aa,bb,cc
:简约的设计GET /ec2/instance?batch={"ids":["aa","bb","cc"]}
:健壮的设计GET /ec2/instance?batch=[{"method":"DELETE","id":"aa"},{"method":"DELETE","id":"bb"},{"method":"DELETE","id":"cc"}]
:facebook 的设计(墙外)把上面的
GET
都改成POST
也没什么问题。设计 batch 的时候就不用太纠结于 RESTful 的定义(至少我是这样觉得),毕竟是为了优化性能而存在的东西。