gpt4 book ai didi

c# - REST API 设计 - 使用请求主体删除多个项目

转载 作者:可可西里 更新时间:2023-11-01 16:47:04 27 4
gpt4 key购买 nike

我有一个显示供应商产品的 API

我们的 UI 将允许用户选择各种过滤条件并使用它一次删除多个产品。

问题是执行几千个单独的 HTTP 删除请求花费的时间太长了:

DELETE /api/supplier/6/products/5
DELETE /api/supplier/6/products/7
DELETE /api/supplier/6/products/8
DELETE /api/supplier/6/products/10
...

目的是通过一次 HTTP 调用来一次删除一堆供应商产品。我可以将主体传递给删除,以便它包含我们要删除的所有 ID 的列表:

DELETE /api/supplier/6/products
Body:
{
"DeleteIds": "[5,7,8,10]"
}

在我们将其置于我们的生产代理防火墙后面之前,它一直运行良好,该防火墙从 DELETE 请求中剥离了正文。

我看过 HTTP 规范 RFC 2616 Fielding, et al.它没有明确说明我不应该在 DELETE 请求中使用正文,进一步阅读表明发送带有 DELETE 请求的正文没有任何问题。

我可以控制我们的代理服务器,并且能够让所有请求都通过正文,但我担心这可能不是最佳做法。我们可能有数千个要传递的 ID,我不希望我们使用 header 或 URL 参数,因为我们可能会遇到长度限制。

所以我的问题是:使用请求正文删除多个产品的正确方法是什么?不仅仅是意见,还有关于为什么我不应该使用 HTTP DELETE 的主体的实际文档证据吗?

我应该继续吗

DELETE /api/supplier/6/products (Using a body)

或者不应该对正文使用 DELETE,而是对类似的东西执行 POST

POST /api/supplier/6/products/deletemultiple

编辑:这个问题有一些很好的辩论:Restful way for deleting a bunch of items它没有解决我关于将 DELETE 请求的主体用于自定义删除操作的问题,但是对于批量删除可以发生的不同方式存在一些很好的争论。

最佳答案

我都做过,当我想将几个项目传递给删除操作时,我使用 POST 并且只使用 int[] 作为参数,但我确保我调用的 URL 非常明确,因为我使用的是配置而不是约定:即:

/api/products/DeleteAllById

如果我要删除单个项目,那么我将使用 DELETE

关于c# - REST API 设计 - 使用请求主体删除多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41766415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com