如何使用端点而不是仅使用一个 ID 传递要删除的 ID 数组
Posted
技术标签:
【中文标题】如何使用端点而不是仅使用一个 ID 传递要删除的 ID 数组【英文标题】:How to pass an array of id's to delete using an endpoint rather than just one Id 【发布时间】:2021-07-12 07:05:37 【问题描述】:我正在尝试删除必须在后端删除的 id 数组。我将使用一个端点来接受这个并使用 redux 执行删除请求。它将在端点:
DELETE /api/v1/algo/configs?configIds=1,2,3
1、2 和 3 仅代表虚拟 id。作为查询参数传递,响应看起来像这样:
"configIds": ["1","2","3"]
上面这些是应该返回的(删除的数组)
这是我到目前为止在前端的内容,它是一个处理程序,应该异步地一个一个地删除数组,这样速率限制就不会变得疯狂。
async function deleteAll()
for (const id in filteredStoppedConfigs)
await actions.clearAllConfigs(filteredStoppedConfigs[id]);
filteredStoppedConfigs
是要删除的 ID 号数组
这是我已经实现的用于删除一个 id 的端点。它工作并完成工作。但不确定如何在删除整个数组的新端点上实现它。基本上清除了整个数组
async function deleteConfig(configId)
const options =
method: 'DELETE',
headers:
'content-type': 'application/json'
,
url: `$ALGOS_API_ROOT/configs/$configId`
;
return axios(options);
一直在尝试在线研究,但没有人真正提出过类似的问题。任何帮助表示赞赏。谢谢!
【问题讨论】:
【参考方案1】:选项 1
你需要参数化你的数组元素,创建一个看起来像DELETE /api/v1/algo/configs?configIds[]=1&configIds[]=2&configIds[]=3
的字符串
选项 2
使用 POST 或 PATCH ROUTE 并在请求正文中传递数组的 JSON 字符串。 POST|PATCH /api/v1/algo/configs
headers: ....,
....
body:
ids: stringifiedArray
,
....
选项 3 不太受鼓励
像这样的简单端点就可以了:DELETE /api/v1/algo/configs
。
接下来,您可能可以对数组 JSON.stringify(arrayHere)
进行字符串化,并将该字符串化数组作为请求正文的一部分传递,如下所示:
body:
ids: stringifiedArray
然后您将在您的后端收到此主体参数(将其列入白名单),对其进行解析,然后将其用于您所需的操作
【讨论】:
【参考方案2】:您可以如下更新deleteConfig
来处理删除一个配置ID 以及多个配置ID 的请求
async function deleteConfig(configId)
const options =
method: 'DELETE',
headers:
'content-type': 'application/json'
,
url: configId.includes(",") ? `$ALGOS_API_ROOT/configs?configIds=$configId` : `$ALGOS_API_ROOT/configs/$configId`
;
return axios(options);
处理删除一个配置 id 的请求
deleteConfig(single_config_id);
处理删除多个配置 ID 的请求
deleteConfig(array_of_config_ids.join());
【讨论】:
以上是关于如何使用端点而不是仅使用一个 ID 传递要删除的 ID 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用 ForEach 而不是 List 从动态范围中删除