I’m creating a RESTful web service that allows me to import documents by name. I would import a document using a path like this:
/documents/frequently-asked-questions
If the document doesn’t already exist, it would create a new one; otherwise, it would simply overwrite the existing document.
The question I have is whether this is a wrongheaded endpoint for a RESTful service. Normally I’d use POSTs for creates and PUTs for updates. Here it’s not known in advance whether the document already exists. If this is reasonable, then what’s the best HTTP method? If it’s not correct, then what’s a better approach?
The HTTP 1.1 specification says for POST:
And for PUT:
Given that, and the fact that PUT is idempotent and POST is not, PUT seems the logical choice here for both your create and update.
Source:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2