couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jens Alfke (JIRA)" <>
Subject [jira] [Commented] (COUCHDB-2052) Add API for discovering feature availability
Date Fri, 07 Feb 2014 19:19:21 GMT


Jens Alfke commented on COUCHDB-2052:

Well, CouchDB doesn't implement HTTP 1.1 correctly then...

(1) I tried sending a GET request for the changes feed with an Upgrade header and "feed=websocket";
it ignored the header and sent back the entire changes feed in normal format.
(2) I tried sending it a gzip-encoded PUT request body, and it failed with a 400 status with
message "invalid_json". Apparently it ignored the Content-Encoding header. (I'm still on version
1.4, though.)
(3) You're right that one could check the version, but part of the reason for this proposal
was to avoid having to have hardcoded knowledge of versions. It's not just one version check
either -- IrisCouch and Cloudant (and BigCouch?) have independent version numbers, so you'd
have to know what versions they incorporated the fix into.

I don't mean to pick on CouchDB. I'm sure most web server engines, aside from the big ones
like Apache, don't pay attention to all the more obscure edges of the HTTP spec, like honoring
Upgrade and Content-Encoding headers in requests.

> Add API for discovering feature availability
> --------------------------------------------
>                 Key: COUCHDB-2052
>                 URL:
>             Project: CouchDB
>          Issue Type: Improvement
>      Security Level: public(Regular issues) 
>          Components: HTTP Interface
>            Reporter: Jens Alfke
> I propose adding to the response of "GET /" a property called "features" or "extensions"
whose value is an array of strings, each string being an agreed-upon identifier of a specific
optional feature. For example:
> 	{"couchdb": "welcome", "features": ["_bulk_get", "persona"]}, "vendor": …
> Rationale:
> Features are being added to CouchDB over time, plug-ins may add features, and there are
compatible servers that may have nonstandard features (like _bulk_get). But there isn't a
clear way for a client (which might be another server's replicator) to determine what features
a server has. Currently a client looking at the response of a GET / has to figure out what
server and version thereof it's talking to, and then has to consult hardcoded knowledge that
version X of server Y supports feature Z.
> (True, you can often get away without needing to check, by assuming a feature exists
but falling back to standard behavior if you get an error. But not all features may be so
easy to detect — the behavior of an unaware server might be to ignore the feature and do
the wrong thing, rather than returning an error — and anyway this adds extra round-trips
that slow down the operation.)

This message was sent by Atlassian JIRA

View raw message