HTTP PUT 请求使用过滤器后是否仍然具有幂等性?

3
我正在开发一个RESTful服务,不确定我所做的是否是有效的HTTP。我知道如何使用以下HTTP方法:GET、DELETE和POST,但在支持PUT时,我并不确定。我了解PUT是幂等的,但如果我使用过滤会怎么样呢?
为了清晰明了,如果您要使用我的服务,您可以这样做:
GET /User:列出所有用户。
GET /User/1:获取ID为1的用户。
POST /User:创建新用户。
PUT /User/2:创建具有ID为2的新用户,如果该用户已存在,则更新该用户。
当我想在PUT请求中实现过滤时,我开始遇到困难。例如,我允许:
PUT /User?FirstName=Andrew&LastName=Schools
这将更新名字为Andrew和姓氏为Schools的资源。此外,您还可以执行以下操作:
PUT /User?status=1
这将使用请求正文中的内容更新任何状态为1的用户。
我的问题是,既然我正在启用PUT上的过滤,那么它还是幂等的吗?我的初步想法是否定的,因为第一次使用上面的过滤器进行PUT操作可能会改变后续PUT找到的完全相同的过滤器,因此它不是幂等的。如果以上说法确实正确,那么这个功能在POST中更好地服务于客户。
1个回答

0

我看不出有什么问题。相关的是资源的最终状态。如果您应用了两次PUT,并且在第二个请求中,过滤器识别到更少或没有资源,那么它是否会改变您想要修改的资源的状态?


是的,通过筛选器找到的资源已经正确地被替换了。所以如果我说筛选器与幂等性无关,而是每个用户的更新方式与幂等性有关,那么我的说法就是正确的吗?因此,如果一个用户在前两次被筛选器找到,但在第三次没有被找到,只要该用户在前两次完全被替换为相应的数据,这仍然被认为是幂等的。 - Andrew Schools
是的。重要的是资源的最终状态。 - Julian Reschke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接