Github user kxepal commented on the pull request:

    https://github.com/apache/couchdb-couch/pull/18#issuecomment-94781101
  
    Hi there, short update.
    
    I'd started porting this PR over 2.0. First note that in current state it 
doesn't works and breaks any document update, so don't try to merge it (:
    
    Second, while fixing it I found that initial format doesn't assumes any 
possible errors:
    
    ```
    $ echo '{"docs": [{"id": "foo"}, {"id": "bar"}]}' | http 
http://localhost:15986/test/_bulk_get  
    [
        [{"_id": "foo", "_rev": "1-967a00dff5e02add41819138abb3284d"}],
        [{"_id": "bar", "_rev": "1-6aaf7080aad9d1a9482e07c46581dac0"}]
    ]
    ```
    
    What the response should be if document id is missed or wrong or document 
not exists or some parameters are malformed? Oblivious solution is:
    
    ```
    $ echo '{"docs": [{"id": "foo"}, {"id": "bar"}]}' | http 
http://localhost:15986/test/_bulk_get  
    [
        [{"_id": "foo", "_rev": "1-967a00dff5e02add41819138abb3284d"}],
        [{"error": "not_found", "id": "bar", "reason": "not today"}]
    ]
    ```
    
    But such array of arrays makes me sad panda.
    
    I'd started to look on current implementations and found no agreement on 
what the response should looks like:
    
    - 
[Couchbase](http://developer.couchbase.com/mobile/develop/references/sync-gateway/rest-api/database/post-bulk-get/index.html)
 assumes the response to be always multipart and request payload should contain 
array of objects where "id" field is mandatory, "rev" and "atts_since"  are 
optional and no mention of the others. So, passing open_revs will not work for 
Couchbase or make it incompatible with.
    
    - 
[RCouch](https://github.com/rcouch/couchdb-couch-httpd/blob/master/src/couch_httpd_bulk_get.erl#L45)
 returns JSON response in the fashion `{"results": [{"id": "foo", "docs": 
[...]}, ...]}` what is completely different from proposed patch and 
pouchdb-bulk-get implementation.
    
    - Each of these are incompatible with pouchdb-bulk-get project which was 
proposed as "standard implementation"
    
    Ok, now I'm really confused now. If I make /_bulk_get compatible with 
PouchDB that will means that it will be not compatible with the 
Couchbase/RCouch and be very annoying for people who'll try use it outside of 
replication context (it's stupid to not).
    
    If I start fixing oblivious flaws of proposed implementation, then we'll 
have yet another incompatible with the others /_bulk_get implementation. Not 
cool.
    
    At this moment I want to flip the table and make this feature from scratch, 
starting first from the actual proposal about the API of final implementation, 
finding agreement on this in CouchDB team and call PouchDB and Couchbase folks 
to the table (once I put it back) for the further implementation as a part of 
replication API. And make this short and quickly since @dholth made all the 
work, current devil is in the details and shape of things.
    
    Otherwise we (CouchDB) will end with semi-compatible with *ouchDB world 
resource that's broken for everyday usage. I'm -1 on such turn of events.
    
    Certainly, I may be wrong at all of this, so any ideas are welcome.
    
    Nudge list: @nolanlawson @dholth @janl @benoitc 


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to