我是新开发者,我对http服务知之甚少。所以我发现了PUT和POST之间的区别。我读了这个https://forums.asp.net/t/2100831.aspx?WebApi+what+is+difference+between+PUT+and+POST
下面的事情不清楚特别是什么是幂等的?
我找到一个人说 - PUT方法被定义为幂等(即:在后续调用中具有相同的结果)。 PUT将始终更新相同的资源并返回200状态代码。
但POST会创建一个新资源并返回201状态代码。
任何人都会介意解释为什么PUT被认为是幂等的。感谢
答案 0 :(得分:3)
从纯粹的RESTful观点来看,PUT被认为是幂等的,因为无论你做出多少次同样的请求,结果都是一样的。
但是,这就是说,不要忘记您尝试更新的对象可能会在这些相同的PUT请求之间更改其状态,因此您获得的响应可能实际上并不相同。
这并不意味着如果你发出100个PUT请求,只有一个请求通过,就像在之前的响应中一样。
还有一件事,为了清楚起见,POST用于创建新资源,通常返回所创建资源的唯一标识符。
PUT用于更新资源,通常会返回整个更新的资源,以便您可以看到对其进行了哪些更改。
关于每个数据应该接受哪些数据已经有很多讨论,我个人认为POST需要创建资源所需的字段,没有ID,而PUT需要更新字段,如果ID是其中的一部分该URL然后可以再次省略
例如,假设您向端点发出PUT请求,如下所示:api/users/1
其中1是您需要识别此用户的ID,那么您的方法可能如下所示:
[HttpPut]
public UserClass Put(int id, UserClass user)
{}
在这种情况下,您的UserClass不需要ID,因为您已经从URL中获取了该ID。
希望所有这些都有意义,我发现在RESTful环境中使用“幂等”非常混乱!
答案 1 :(得分:0)
假设您要更新用户对象,以便以这种方式调用 PutUser 方法
$.ajax({
url: "yourUrl/PutUser/1",
type: 'PUT',
data: "firstName: fName, lastName: lName",
success: function(data) {
alert('User Updated.');
}
});
你的 PutUser 方法看起来像这样
[HttpPut]
public dynamic PutUser(int id, UserClass user)
{}
在这种情况下,如果使用相同的参数1,2 ... 5或N次使Ajax PUT请求结果相同,那就是幂等的意思。
另一方面,如果你有这个
$.ajax({
url: "yourUrl/PostUser",
type: 'POST',
data: "firstName: fName, lastName: lName",
success: function(data) {
alert('User Updated.');
}
});
您的 PostUser 方法看起来像这样
[HttpPost]
public dynamic PostUser(UserClass user)
{}
使用相同的参数调用PostUser方法N次,你会发布N个相同的用户,这可能意味着你的数据库中有100个相同的行,所以你的所有调用都将被处理。