提问人:Cephalopod 提问时间:1/13/2023 更新时间:1/13/2023 访问量:61
删除写保护资源的 Restful 方式
Restful way to delete a write-protected resource
问:
在我的 API 中,资源可以进行写保护。尝试删除此类资源将返回 409(冲突)响应。
对于允许更改资源的受保护状态的用户,我想引入一个请求即可删除受保护资源的选项。应该如何通过此选项?
可能的解决方案:
- 请求正文 -- 不应用于删除请求
- 查询参数 -- 更改 URI,因此从技术上讲指的是不同的资源
- 自定义标头 -- 通常不建议使用
- 标准标头 -- 无适用
- 两个请求 -- 不是原子的,事情可能发生在两者之间(例如,另一个用户修改资源)
- 替代端点 -- 不是 restful?
相关问题
- 在 REST API 中,DELETE 方法可以有参数吗?
- 答案对查询参数说“是”,但询问是否删除集合的子集
- REST、HTTP DELETE 和参数
- 询问确认标志,答案说它应该在 UI 而不是 API 中处理
- 还说它违反了统一接口原则,但没有解释为什么以及如何解释
- 还认为使用查询参数会违反 URI 原则
- DELETE 请求正文的 RESTful 替代方案
- 接受的答案说使用正文,但许多评论者报告了技术问题
- 建议将查询参数作为替代参数,提出了对 URI 原则的担忧
- 是否允许实体正文用于 HTTP DELETE 请求?
- 表示不使用请求正文,即使技术上允许
- 为 restful 资源设计 DELETE 的最佳方式是什么
- 表示使用查询参数,但同样在子集上下文中
答:
对于允许更改资源的受保护状态的用户,我想引入一个请求即可删除受保护资源的选项。应该如何通过此选项?
如果请求消息的含义与 HTTP DELETE 一致,那么您可能应该只使用 HTTP DELETE,而不是尝试发明一种方言来区分 DELETE 和 no-no-I-really-mean-it-DELETE。
您的消息语义是否与 HTTP DELETE 一致?您可能需要在 RFC 9110 中考虑此观察结果
允许使用 DELETE 方法的资源相对较少 -- 它的主要用途是用于远程创作环境,用户对其效果有一定的指导。
DELETE 是我们希望 Web 服务器停止共享资源表示形式时发送到该服务器的方法令牌。它的语义植根于通过网络域传输文档。
另一方面,如果消息与 HTTP DELETE 不一致,则应考虑使用 HTTP POST。
POST 在 HTTP 中有许多有用的用途,包括“此操作不值得标准化”的一般目的。 -- Fielding,2009 年
以下是考虑这种区别的一种方式:我们创建“REST API”的目标是创建一个外观,将我们的域服务伪装成可感知 HTTP 的文档存储。
如果客户真正在做的是将文档标记为隐藏在存储中;作为副作用,我们可能会在域服务中进行一系列更改,那么 DELETE 是合适的。
另一方面,如果客户端真正要做的是将信息发送到我们的域服务,并且作为副作用,某些文档将被隐藏,那么 POST 是合适的。
评论