couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul Carey" <paul.p.ca...@gmail.com>
Subject HTTP response codes on conflict
Date Thu, 08 Jan 2009 22:25:38 GMT
I was wondering about the error codes returned by CouchDB in case of
database conflict and document conflict.

An attempt to create an already existing database returns a 409.

$ curl -v -s -X PUT localhost:5984/shiny_new_db 2>&1 | grep '< HTTP'
< HTTP/1.1 201 Created

$ curl -v -s -X PUT localhost:5984/shiny_new_db 2>&1 | grep '< HTTP'
< HTTP/1.1 409 Conflict

>From the 409 section of the HTTP spec [1]
"This code is only allowed in situations where it is expected that the
user might be able to resolve the conflict and resubmit the request."

But the database already exists - there is no resolution, so I'm not
sure a 409 is the best response code here.

The 412 section of the spec states
"The precondition given in one or more of the request-header fields
evaluated to false"
Arguably, this is what should be returned when an attempt is made to
re-create a pre-existing database - the precondition is that you can
PUT to a database URI at most once.


As for document conflict, CouchDB returns a 412.

$ curl -v -s -X PUT -d '{"_id":"foo"}' localhost:5984/shiny_new_db/foo
2>&1 | grep '< HTTP'
< HTTP/1.1 201 Created

$ curl -v -s -X PUT -d '{"_id":"foo"}' localhost:5984/shiny_new_db/foo
2>&1 | grep '< HTTP'
< HTTP/1.1 412 Precondition Failed

I think a document conflict might have returned a 409 at some point in
the past. In fact this is what the Document API wiki page [2] states
it returns. Given that the user may resolve the conflict and resubmit
the request, a 409 makes sense here.

To clarify, unless I'm missing something, I think an attempt to create
an already existing database should return a 412 and an attempt to
update a document that results in a conflict should return a 409.

All the best

Paul

[1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
[2] http://wiki.apache.org/couchdb/HTTP_Document_API

Mime
View raw message