我正在开发一个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中更好地服务于客户。
为了清晰明了,如果您要使用我的服务,您可以这样做:
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中更好地服务于客户。