如何设计需要大量数据的DELETE REST API?

How to design DELETE REST API that requires lots of data?

我想实现 DELETE REST API。但我需要提供要删除的 ID 列表的选项。此列表可以任意长,并且可能不适合 URL.

我知道 POST 支持这个,但是支持这个和 DELETE 似乎值得商榷。我不知道其他人是如何处理这个案子的。

如何设计 API 来处理这种情况?

不幸的是,这是 REST 中最大的限制之一,但有很多方法可以解决它。

在这种情况下,我将抽象出一个新实体 DeletionRequest,并使用适当的 ID 发布或放置它。由于它是一个新实体,它将有自己的休息端点。

这样做的一个很好的副作用是可以扩展端点和实体以支持异步请求。如果你想删除大量数据,你不想依赖它在单个请求中发生,因为超时之类的事情会妨碍你。使用 DeletionRequest,用户可以在第一次推送时获得删除请求的 ID,然后使用 GET 请求检查状态。在幕后,您可以使用异步系统(celery、sidekiq 等)实际删除内容并更新 DeletionRequest 的状态。

当然,您不必走那么远,但这将允许您朝那个方向扩展应用程序,而无需更改您的 API。

URI 是资源标识符,因此我认为 DELETE 不应包含正文,即使您可以使用客户端和服务器执行此操作。您可以在 URI 中发送数据,也可以在 DELETE 之前发送数据。

我在这里看到 3 个选项,但也许还有其他选项:

  • 按照 Robert 所说的去做 POST 事务资源而不是 DeletionRequest。
  • 将要删除的资源分组并删除整个组。
  • 大量破解并修补您要从中删除的资源集合。