到目前为止,我理解幂等性的方式基本上是:如果我向服务器发送 10 个相同的 PUT,则创建的额外资源将与我发送单个 PUT 语句时相同。
我认为这意味着以下实现将遵守这一点:
[AcceptVerbs(HttpVerbs.Put)]
ContentResult User(){
//parse XML that was sent to get User info
//User has an e-mail address which is unique to the system
//create a new user in the system only if one for this e-mail address does not exist
return Content(something, "text/xml");
}
现在,如果我为用户数据发送了 10 个带有 XML 的 PUT,并且它们都包含相同的电子邮件地址,那么只会创建一个用户。
但是,如果他们发送了 10 个请求(无论出于何种原因)并且它们都是不同的,但电子邮件是相同的,该怎么办。如果第一个请求没有通过,那么将使用第二个请求的数据来创建用户,而后面的 8 个请求将被忽略。这里有漏洞吗?或者我应该只忽略在各个方面都明确相同的请求,而是返回一个错误,说明如果用户使用相同的电子邮件地址,用户已经存在?
另外,这样的 PUT 语句应该发送什么样的响应?关于用户的信息?也许一个 ID 可以通过其他 API 调用来操纵它们?或者它应该只说“成功”或“失败:[错误详细信息]”?