RestFul API 实践中,如何定义批量操作API?

比如资源 product 的资源路由和删除操作的路由和url大概长下面这样

// 路由定义
Route::resource('products', Product::class);
// 请求方法和url
delete /products/1

控制器会自动注入要删除的资源的 id, 到这里都没问题。

// 控制器方法
public function destroy($id){}

假设我要定义一个 RestFul 风格的批量删除Api, 应该如何定义路由控制器和Url比较好呢 ?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5
Tomo11111

DELETE /products

1年前 评论

批量操作的时候一般就使用 POST 方式请求
可以类似于 /products/batch
增加个 method 参数
method: create, update, delete

剩下的参数根据情况传需要的内容就可以了

1年前 评论
徵羽宫 (楼主) 1年前

RestFul 是一种风格 而不是一种约束 我是觉得楼上的方法都可行

1年前 评论

首先,批量操作不属于 restful 标准,所以你只需要选择一个不被 restful 占用的 api 并自行定义即可。例如,PUT /resources 不属于 restful 约束的范围,可以自由使用。在 PUT /resources 中加入类似下面的 body 就可以了.

{
   "methods": ["post"], // 实际场景中也会有,一个表单,几行数据, 有的删除,有的修改,有的新增的情况. 这个结构我自己用都是可以兼容到的
   "scope_id": "12345",
   "data": [{}] // 批量操作的数据
}

另外批量删除比较特殊, 存在不需要表单的批量删除的形式, 可以使用没有被 restful 占用的DELETE /resources 接口. 传参可以选择 ?ids=xxx,xxx
也可以选择 json body {ids: xxx}, 根据实际情况选择

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!