在没有实体 ID 的情况下在 REST API 中删除最佳实践

smo*_*lge 4 rest

我想在 REST API 中删除一个时间跨度。

它没有 id,因此在“/timespan/”上调用 HTTP DELETE 是不可能的。实现是可能的,但我宁愿不付出额外的努力(需要一些数据库修改),除非有充分的理由添加它。

我考虑过在请求中使用“start”和“end”在“/timespan/”上调用 DELETE,但据我了解,这与 REST 的工作方式发生冲突。

在“/timespan//”或者“/timespan/+”之类的串联上调用 DELETE 是否合法,或者我到底应该实现 ID 吗?

Eri*_*ein 6

你是对的。DELETE 不占用实体。

RFC 7231:

DELETE 请求消息中的有效负载没有定义的语义;在 DELETE 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。

我已经看到你想要做的事情

删除 /sites/{siteId}/maintenance

但这确实不是最佳的。如果maintenance是资源,则需要某种方式进行唯一标识。如果它是资源的属性,则可以通过该资源PUTPATCH在该资源上删除它。