如何使用端点而不是仅使用一个 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 从动态范围中删除

koa和sqlite3节点REST端点仅返回数据库对象而不是数据

反应 CRUD 操作总是使用状态

如何通过索引(而不是 id)在 SQLite 中获取一行

如何使用休眠条件仅返回对象的一个​​元素而不是整个对象?