If you use CouchDB/Cloudant, then you can access everything using curl. The trouble is that it if you are using an authenticated, hosted service such as Cloudant's, then your credentials appear on your command-line history and there is a lot of typing. e.g.
curl 'https://mypassword:MyPAssw0rd@myhost.cloudant.com/database/12345678'With gocurl, this becomes:
gocurl /database/12345678Or adding a document with curl:
curl -X POST \
-H 'Content-type:application/json' \
-d'{"a":1,"b":2}' \
'https://mypassword:MyPAssw0rd@myhost.cloudant.com/database' With gocurl, this becomes:
gocurl -X POST -d'{"a":1,"b":2}' /database You will need to download and install the Go compiler. Clone this repo then:
go build ./cmd/gocurlThe copy the resultant binary gocurl (or gocurl.exe in Windows systems) into your path.
Your CouchDB credentials are taken from an environment variable "COUCH_URL". This can be set in your console with
export COUCH_URL="https://mypassword:MyPAssw0rd@myhost.cloudant.com"or this line can be added to your ~/.bashrc/~/.bash_profile/~/.zshrc file.
If you don't want credentials stored in your command-line history, you can set an environment variable by extracting the credentials from a file e.g.
export COUCH_URL=`cat ~/.ibm/cloudant.json | jq -r .url`where ~/.ibm/cloudant.json is a JSON file that is readable only by my user containing the Cloudant service credentials. Even better store your your credentials in a password manager and extract them using CLI tools when needed:
# extract credentials from 1Password password manager
export COUCH_URL=`op read op://Private/CloudantBasic/website`- All command-line switches are passed through to curl.
- Instead of passing through a full url, pass through a relative url.
- If the url is omitted, then a relative url of "/" is assumed.
- The content-type of
application-jsonis added for you if you don't already provide a content type.
> gocurl -X PUT /newdatabase
{"ok":true} > gocurl -X POST -d'{"a":1,"b":2}' /newdatabase
{"ok":true,"id":"005fa466b4f690ccad7b4d194f071bbe","rev":"1-25f9b97d75a648d1fcd23f0a73d2776e"} > gocurl /newdatabase/005fa466b4f690ccad7b4d194f071bbe
{"_id":"005fa466b4f690ccad7b4d194f071bbe","_rev":"1-25f9b97d75a648d1fcd23f0a73d2776e","a":1,"b":2} > gocurl '/newdatabase/_all_docs?limit=10&include_docs=true'
{"total_rows":1,"offset":0,"rows":[{"id":"005fa466b4f690ccad7b4d194f071bbe","key":"005fa466b4f690ccad7b4d194f071bbe","value":{"rev":"1-25f9b97d75a648d1fcd23f0a73d2776e"},"doc":{"_id":"005fa466b4f690ccad7b4d194f071bbe","_rev":"1-25f9b97d75a648d1fcd23f0a73d2776e","a":1,"b":2}}]} > gocurl -X DELETE /newdatabase
{"ok":true} gocurl -h
gocurl -v
etc. If jq is installed, gocurl automatically pipes the curl output to jq ., when stdout is a terminal. You may also do the piping yourself to extract a subset of the data e.g
gocurl '/newdatabase/_all_docs?limit=10&include_docs=true' | jq '.total_rows'or
gocurl '/newdatabase/_all_docs?limit=10&include_docs=true' | jq '.rows[0].doc.name | length'