gpt4 book ai didi

rest - 使用 REST 删除多条记录

转载 作者:行者123 更新时间:2023-12-02 19:41:40 27 4
gpt4 key购买 nike

删除多个项目的 REST 方式是什么?

我的用例是我有一个 Backbone Collection,其中我需要能够一次删除多个项目。选项似乎是:

  1. 为每条记录发送 DELETE 请求(如果可能有数十个项目,这似乎是个坏主意);
  2. 发送 DELETE,其中要删除的 ID 在 URL 中串在一起(即“/records/1;2;3”);
  3. 以非 REST 方式发送包含标记为删除的 ID 的自定义 JSON 对象。

所有选项都不理想。

这似乎是 REST 约定的灰色地带。

最佳答案

  1. 是一个可行的 RESTful 选择,但显然存在您所描述的局限性。
  2. 不要这样做。中介机构会将其解释为“删除 /records/1;2;3 处的(单个)资源”——因此对此的 2xx 响应可能会导致他们清除 缓存/记录/1;2;3; 清除/records/1/records/2/records/3;代理 /records/1;2;3 的 410 响应,或其他在您看来没有意义的内容。
  3. 这个选择是最好的,并且可以 REST 方式完成。如果您正在创建 API 并且希望允许对资源进行大规模更改,则可以使用 REST 来完成此操作,但具体如何操作对于许多人来说并不是显而易见的。一种方法是创建“更改请求”资源(例如,通过将 records=[1,2,3] 等正文发布到 /delete-requests )并轮询创建的资源(由响应的 Location header 指定)以查明您的请求是否已被接受、拒绝、正在进行或已完成。这对于长时间运行的操作很有用。另一种方法是向列表资源/records发送PATCH请求,其正文包含资源列表和要执行的操作这些资源(以您想要支持的任何格式)。这对于快速操作非常有用,其中请求的响应代码可以指示操作的结果。

一切都可以在保持 REST 约束的情况下实现,通常答案是将“问题”放入资源中,并给它一个 URL。
因此,批处理操作,例如在此处删除,或将多个项目发布到列表,或对大量资源进行相同的编辑,都可以通过创建“批处理操作”列表并向其发布新操作来处理。

不要忘记,REST 并不是解决任何问题的唯一方法。 “REST”只是一种架构风格,您不必遵守它(但如果不遵守,您就会失去互联网的某些好处)。我建议你看一下这个HTTP API architectures的列表并选择一个适合您的。只要让自己意识到如果选择其他架构您会失去什么,并根据您的用例做出明智的决定。

Patterns for handling batch operations in REST web services? 上这个问题有一些不好的答案其中有太多的赞成票,但也应该阅读。

关于rest - 使用 REST 删除多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21863326/

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