微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 REST API 从子集中删除项目

如何解决如何使用 REST API 从子集中删除项目

我想知道以一种宁静的方式从子集中删除项目的最佳方法是什么。我有用户和系列,每个用户都有自己的系列列表(观看、完成等)。例如,如果我们想从用户那里获取一个列表,我们可以使用:GET /users/:id_user/series

如果我们想从那个用户的列表中删除一个系列(但我们不想删除这个系列本身),应该怎么做?

我考虑过使用 DELETE /users/:id_user/series/:id_serie 的可能性,但我不确定这是否适合这种情况(也许是 PATCH?)。

我收到了另一个案例,我们收到了系列和评论。我们可以得到这样的评论GET /series/:serie_id/reviews。在另一种情况下,我们不想在从系列用户列表中删除删除系列本身,但在这种情况下,我们想删除评论,因为它的存在取决于系列。所以我想在这种情况下 DELETE /series/:serie_id/reviews/:review_id 是正确的。

为了选择从子集中删除对象/项目的其余操作,这种差异是否重要?

解决方法

你会如何在网络上做到这一点?

您可以点击一个带有输入控件的表单链接。如果您想一次删除一个系列,您可能有一个下拉菜单,或者如果您想支持批量删除,则可能有很多复选框。用户提供输入,点击提交按钮,浏览器将创建一个 application/x-www-form-urlencoded 文档并将其发送到服务器。

会使用什么方法?通常是 POST,因为我们打算对服务器上的某些资源进行编辑。

我们要编辑什么资源?好吧,简而言之,它可以是任何东西——服务器会将这些信息包含在表单元数据中,这样客户端就可以按照指示去做。

那么服务器应该告诉它在哪里提交表单?同样,它可以在任何地方……但是一个有用的方法是考虑客户端缓存中的哪些资源正在更新。因为如果我们向该资源发送请求,我们就会“免费”获得智能cache invalidation

因此在网络上,我们希望看到:

POST /users/:id_user/series

它必须是POST吗?在 HTML 网络上,也许是这样,因为网络无处不在的客户端是浏览器,而不是编辑器。

It is okay to use POST

但是一个完全有效的替代方法是编辑 /users/:id_user/series 的本地副本,然后将新版本 (PUT) 的完整副本或描述编辑内容的补丁文档发送回服务器(修补)。请注意,对于这两种选择,目标 uri 仍然是 /user/:id_user/series,因此我们仍然获得缓存失效魔法。


在模型中创建新资源只是为了删除某些内容可能是错误的想法。


在某些情况下,编辑或删除必然会影响多个资源。

在某些特定情况下,您可以使用两种资源获得正确的魔法缓存失效(例如,删除一个文档,然后发回另一个文档的更新副本)。

但我们今天没有通用的缓存失效机制。 (我能找到的最接近的东西是 this,它似乎在 2012 年停滞不前。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?