1.3.1. /db

    Returns the HTTP Headers containing a minimal amount of information about the specified database. Since the response body is empty, using the HEAD method is a lightweight way to check if the database exists already or not.

    Request:

    Response:

    1. HTTP/1.1 200 OK
    2. Cache-Control: must-revalidate
    3. Content-Type: application/json
    4. Date: Mon, 12 Aug 2013 01:27:41 GMT
    5. Server: CouchDB (Erlang/OTP)

    GET /{db}

    Gets information about the specified database.

    Request:

    1. GET /receipts HTTP/1.1
    2. Accept: application/json
    3. Host: localhost:5984

    Response:

    1. HTTP/1.1 200 OK
    2. Cache-Control: must-revalidate
    3. Content-Length: 258
    4. Content-Type: application/json
    5. Date: Mon, 12 Aug 2013 01:38:57 GMT
    6. Server: CouchDB (Erlang/OTP)
    7. {
    8. "cluster": {
    9. "n": 3,
    10. "q": 8,
    11. "r": 2,
    12. "w": 2
    13. },
    14. "compact_running": false,
    15. "db_name": "receipts",
    16. "disk_format_version": 6,
    17. "doc_count": 6146,
    18. "doc_del_count": 64637,
    19. "instance_start_time": "0",
    20. "props": {},
    21. "purge_seq": 0,
    22. "sizes": {
    23. "active": 65031503,
    24. "external": 66982448,
    25. "file": 137433211
    26. },
    27. "update_seq": "292786-g1AAAAF..."
    28. }

    PUT /{db}

    Creates a new database. The database name {db} must be composed by following next rules:

    • Name must begin with a lowercase letter (a-z)
    • Lowercase characters (a-z)
    • Digits (0-9)
    • Any of the characters _, $, (, ), +, -, and /.

    If you’re familiar with Regular Expressions, the rules above could be written as ^[a-z][a-z0-9_$()+/-]*$.

    Request:

    1. PUT /db HTTP/1.1
    2. Host: localhost:5984
    1. HTTP/1.1 201 Created
    2. Cache-Control: must-revalidate
    3. Content-Length: 12
    4. Content-Type: application/json
    5. Date: Mon, 12 Aug 2013 08:01:45 GMT
    6. Location: http://localhost:5984/db
    7. Server: CouchDB (Erlang/OTP)
    8. {
    9. "ok": true
    10. }

    If we repeat the same request to CouchDB, it will response with 412 since the database already exists:

    Request:

    Response:

    1. HTTP/1.1 412 Precondition Failed
    2. Cache-Control: must-revalidate
    3. Content-Length: 95
    4. Content-Type: application/json
    5. Date: Mon, 12 Aug 2013 08:01:16 GMT
    6. Server: CouchDB (Erlang/OTP)
    7. {
    8. "error": "file_exists",
    9. "reason": "The database could not be created, the file already exists."
    10. }

    If an invalid database name is supplied, CouchDB returns response with 400:

    Request:

    1. PUT /_db HTTP/1.1
    2. Accept: application/json
    3. Host: localhost:5984

    Request:

    1. HTTP/1.1 400 Bad Request
    2. Cache-Control: must-revalidate
    3. Content-Length: 194
    4. Content-Type: application/json
    5. Date: Mon, 12 Aug 2013 08:02:10 GMT
    6. Server: CouchDB (Erlang/OTP)
    7. {
    8. "error": "illegal_database_name",
    9. "reason": "Name: '_db'. Only lowercase characters (a-z), digits (0-9), and any of the characters _, $, (, ), +, -, and / are allowed. Must begin with a letter."
    10. }

    DELETE /{db}

    Deletes the specified database, and all the documents and attachments contained within it.

    Request:

    1. DELETE /db HTTP/1.1
    2. Accept: application/json
    3. Host: localhost:5984

    Response:

    1. HTTP/1.1 200 OK
    2. Cache-Control: must-revalidate
    3. Content-Length: 12
    4. Content-Type: application/json
    5. Date: Mon, 12 Aug 2013 08:54:00 GMT
    6. Server: CouchDB (Erlang/OTP)
    7. {
    8. "ok": true
    9. }

    POST /{db}

    If the JSON structure includes the _id field, then the document will be created with the specified document ID.

    If the _id field is not specified, a new unique ID will be generated, following whatever UUID algorithm is configured for that server.

    Request:

    Response:

    1. HTTP/1.1 201 Created
    2. Cache-Control: must-revalidate
    3. Content-Type: application/json
    4. Date: Tue, 13 Aug 2013 15:19:25 GMT
    5. Location: http://localhost:5984/db/ab39fe0993049b84cfa81acd6ebad09d
    6. Server: CouchDB (Erlang/OTP)
    7. {
    8. "id": "ab39fe0993049b84cfa81acd6ebad09d",
    9. "ok": true,
    10. "rev": "1-9c65296036141e575d32ba9c034dd3ee"
    11. }

    The document ID can be specified by including the _id field in the JSON of the submitted record. The following request will create the same document with the ID FishStew.

    1.3.1.2. Batch Mode Writes

    You can write documents to the database at a higher rate by using the batch option. This collects document writes together in memory (on a per-user basis) before they are committed to disk. This increases the risk of the documents not being stored in the event of a failure, since the documents are not written to disk immediately.

    Batch mode is not suitable for critical data, but may be ideal for applications such as log data, when the risk of some data loss due to a crash is acceptable.

    To use batch mode, append the batch=ok query argument to the URL of a POST /{db}, , or DELETE /{db}/{docid} request. The CouchDB server will respond with an HTTP response code immediately.

    Request:

    1. POST /db?batch=ok HTTP/1.1
    2. Accept: application/json
    3. Content-Length: 98
    4. Content-Type: application/json
    5. {
    6. "_id": "FishStew",
    7. "servings": 4,
    8. "subtitle": "Delicious with fresh bread",
    9. "title": "Fish Stew"
    10. }
    1. HTTP/1.1 202 Accepted
    2. Cache-Control: must-revalidate
    3. Content-Length: 28
    4. Content-Type: application/json
    5. Date: Tue, 13 Aug 2013 15:19:25 GMT
    6. Location: http://localhost:5984/db/FishStew
    7. Server: CouchDB (Erlang/OTP)
    8. {
    9. "id": "FishStew",
    10. }