【发布时间】:2020-11-24 08:12:54
【问题描述】:
我需要删除一些资源,但我想让客户决定是同时删除相关资源还是保留它。
例如,假设我有一个拥有多个客户的项目。当我想删除项目时,我想在请求中指定是否删除其关联客户。
所以我问我是否可以这样做:
DELETE http://..../.../someproject?deletecustomers=true
【问题讨论】:
我需要删除一些资源,但我想让客户决定是同时删除相关资源还是保留它。
例如,假设我有一个拥有多个客户的项目。当我想删除项目时,我想在请求中指定是否删除其关联客户。
所以我问我是否可以这样做:
DELETE http://..../.../someproject?deletecustomers=true
【问题讨论】:
REST 架构对整体设计施加的少数约束之一是缓存。 HTTP 中的缓存适用于作为缓存键的整个 URI,其中值对应于缓存的表示响应。对该 URI 执行的任何不安全操作,例如 POST、PUT、DELETE 等,都将导致该存储的响应被驱逐(如果超过了某个时间阈值也是如此)。在向 URI 附加更多参数时,实际上作用于完整 URI 的缓存可能找不到因此要驱逐的资源表示。在后台删除关联资源的另一个问题是,它会绕过任何缓存,因此他们不会首先注意到该删除,并且可能仍然为客户端提供过时的响应。因此,特别是如果客户端也可以决定是否删除关联资源,最好发出第二个 DELETE 请求。
请注意,DELETE 被定义为仅删除该资源的 URI 映射,因此对同一 URI 的连续请求不会返回该资源的数据,但这并不一定意味着该资源的数据是从系统中删除。但是,通常,这些数据也会作为DELETE 操作的一部分被删除。这是一个完美的例子,说明 REST 架构中的某些东西是依赖于实现的,它们对客户端是透明的,这意味着它们并不真正了解远程系统的真实行为。
【讨论】: