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

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

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

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

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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 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年前 评论