これまでのところ、冪等性を理解する方法は基本的に次のとおりです。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");
}
ここで、ユーザー データの XML を含む 10 個の PUT を送信し、それらすべてに同じ電子メール アドレスが含まれている場合、作成されるユーザーは 1 人だけです。
しかし、(なんらかの理由で) 10 件の要求を送信し、それらはすべて異なっていても、電子メールは同じである場合はどうなるでしょうか。最初のリクエストが成功しなかった場合、2 番目のリクエストのデータを使用してユーザーが作成され、その後の 8 つのリクエストは無視されます。ここに欠陥はありますか?それとも、あらゆる点で明示的に同一の要求を文字通り無視するだけで、代わりに、同じ電子メール アドレスを使用している場合、ユーザーが既に存在するというエラーを送り返す必要がありますか?
また、そのような PUT ステートメントからどのような応答を送信する必要がありますか? ユーザーに関する情報?他の API 呼び出しでそれらを操作するための ID でしょうか。それとも、単に「成功」または「失敗: [エラーの詳細]」と表示する必要がありますか?