[ https://issues.apache.org/jira/browse/COUCHDB-2748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15105580#comment-15105580 ]
Eric Avdey commented on COUCHDB-2748: ------------------------------------- Well, I definitely not agree with the second approach, Couch keys are stings, not URNs, so there are no need for them to comply with RFC 2141 and I don't think we should ever unsolicitedly modify documents on creation or update. As for a first one - it does look wrong that we allow both REST calls like {{curl -X PUT $db/test/%}} and {{curl -X PUT $db/test/%25}} and treating them the same, but I'm not sure if we actually promised anywhere that our URIs are URNs. Personally I'm +1 for tighten validation and throw 400 on first type of the requests, but I'd like to get another opinion. > encoding problems with reserved chars > ------------------------------------- > > Key: COUCHDB-2748 > URL: https://issues.apache.org/jira/browse/COUCHDB-2748 > Project: CouchDB > Issue Type: Bug > Components: Database Core > Reporter: Robert Kowalski > > Let's create a database! > {noformat} > curl -X PUT http://localhost:5984/testrainyday > {noformat} > I get: {{{"ok":true}}} > Let's create a document called BANANA%253A21%25 > {noformat} > curl -X PUT http://localhost:5984/testrainyday/BANANA%253A21%25 -d '{}' > {noformat} > CouchDB returns: > {noformat} > {"_id":"BANANA%3A21%","_rev":"1-967a00dff5e02add41819138abb3284d"} > {noformat} > (note the changed id - it misses the 25) > lets use the id from the response to retrieve the doc: > {noformat} > curl http://localhost:5984/testrainyday/BANANA%3A21% > {noformat} > i get: > {noformat} > {"error":"not_found","reason":"missing"} > {noformat} > :( > New try: > curl http://localhost:5984/testrainyday/_all_docs > returns: > {noformat} > {"total_rows":1,"offset":0,"rows":[ > {"id":"BANANA%3A21%","key":"BANANA%3A21%","value":{"rev":"1-967a00dff5e02add41819138abb3284d"}} > ]} > {noformat} > I get BANANA%3A21% as id again, but when I want to curl it or use in my JS > application, I get `{"error":"not_found","reason":"missing"}` > I noticed that it works for these two ids: > curl -X PUT http://localhost:5984/testrainyday/BANANA%25 -d '{}' > {noformat} > {"ok":true,"id":"BANANA%","rev":"1-967a00dff5e02add41819138abb3284d"} > {noformat} > In this last case it works magically for both ids: > {noformat} > (17:54:11) [robert@tequila-work] ~ $ curl -X PUT > http://localhost:5984/testrainyday/BANANA%25 -d '{}' > {"ok":true,"id":"BANANA%","rev":"1-967a00dff5e02add41819138abb3284d"} > (17:55:45) [robert@tequila-work] ~ $ curl > http://localhost:5984/testrainyday/BANANA%25 > {"_id":"BANANA%","_rev":"1-967a00dff5e02add41819138abb3284d"} > (17:55:57) [robert@tequila-work] ~ $ curl > http://localhost:5984/testrainyday/BANANA% > {"_id":"BANANA%","_rev":"1-967a00dff5e02add41819138abb3284d"} > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)