POST’s lack of idempotence has some nasty side effects particularly for what is probably the most common use of POST today, new resource creation. Consider the following scenario, you POST a request to create a new resource but you don’t get a response. It is impossible to automatically recover from this scenario. You cannot resend the request because the new resource may have been created and you just did not get the response and you cannot check to see if the resource was created because you don’t know the URI it would have been assigned if it had, in fact, been created.
Benjamin suggests using PUT to a client-generated URI (based on a GUID) instead, which makes resource creation idempotent (at the cost of a little ugliness in the URI). (The solution suggested by Peter is somewhat strange though: He suggests using a PUT to a “new resource” URI which will return a server-generated URI to which the client PUTs again … I fail to see any improvement over POST).