1.4. cURL: Your Command Line Friend
The curl
utility is a command line tool available on Unix, Linux,Mac OS X and Windows and many other platforms. curl
provides easyaccess to the HTTP protocol (among others) directly from thecommand-line and is therefore an ideal way of interacting with CouchDBover the HTTP REST API.
For simple GET
requests you can supply the URL of the request. Forexample, to get the database information:
- shell> curl http://127.0.0.1:5984
This returns the database information (formatted in the output below forclarity):
- {
- "couchdb": "Welcome",
- "version": "2.0.0",
- "vendor": {
- "name": "The Apache Software Foundation"
- }
- }
Note
For some URLs, especially those that include special characters such asampersand, exclamation mark, or question mark, you should quote the URL youare specifying on the command line. For example:
- shell> curl 'http://couchdb:5984/_uuids?count=5'
Note
On Microsoft Windows, use double-quotes anywhere you see single-quotes inthe following examples. Use doubled double-quotes (“”) anywhere you seesingle quotes. For example, if you see:
- shell> curl -X PUT 'http:/127.0.0.1:5984/demo/doc' -d '{"motto": "I love gnomes"}'
you should replace it with:
- shell> curl -X PUT "http://127.0.0.1:5984/demo/doc" -d "{""motto"": ""I love gnomes""}"
If you prefer, ^"
and \"
may be used to escape the double-quotecharacter in quoted strings instead.
You can explicitly set the HTTP command using the -X
command line option.For example, when creating a database, you set the name of the database in theURL you send using a PUT request:
- shell> curl -X PUT http://127.0.0.1:5984/demo
- {"ok":true}
But to obtain the database information you use a GET
request (withthe return information formatted for clarity):
- shell> curl -X GET http://127.0.0.1:5984/demo
- {
- "compact_running" : false,
- "doc_count" : 0,
- "db_name" : "demo",
- "purge_seq" : 0,
- "committed_update_seq" : 0,
- "doc_del_count" : 0,
- "disk_format_version" : 5,
- "update_seq" : 0,
- "instance_start_time" : "0",
- "disk_size" : 79
- }
For certain operations, you must specify the content type of request, which youdo by specifying the Content-Type
header using the -H
command-lineoption:
- shell> curl -H 'Content-Type: application/json' http://127.0.0.1:5984/_uuids
You can also submit ‘payload’ data, that is, data in the body of the HTTPrequest using the -d
option. This is useful if you need to submit JSONstructures, for example document data, as part of the request. For example, tosubmit a simple document to the demo
database:
- shell> curl -H 'Content-Type: application/json' \
- -X POST http://127.0.0.1:5984/demo \
- -d '{"company": "Example, Inc."}'
- {"ok":true,"id":"8843faaf0b831d364278331bc3001bd8",
- "rev":"1-33b9fbce46930280dab37d672bbc8bb9"}
In the above example, the argument after the -d
option is the JSON of thedocument we want to submit.
The document can be accessed by using the automatically generated document IDthat was returned:
- shell> curl -X GET http://127.0.0.1:5984/demo/8843faaf0b831d364278331bc3001bd8
- {"_id":"8843faaf0b831d364278331bc3001bd8",
- "_rev":"1-33b9fbce46930280dab37d672bbc8bb9",
- "company":"Example, Inc."}
The API samples in the API Basics show the HTTP command, URL and anypayload information that needs to be submitted (and the expected return value).All of these examples can be reproduced using curl
with the command-lineexamples shown above.