Spec-Zone.ru › CouchDB 3.5

/{db}/{docid}

HEAD /{db}/{docid}

Возвращает HTTP-заголовки, содержащие минимальный объем информации об указанном документе. Метод поддерживает те же аргументы запроса, что и метод GET /{db}/{docid}, но возвращается только информация из заголовков (включая размер документа и ревизию в виде ETag).

Заголовок ETag показывает текущую ревизию запрошенного документа, а Content-Length указывает размер данных, если бы документ был запрошен полностью.

Если добавить любой из аргументов запроса (см. GET /{db}/{docid}), возвращаемые HTTP-заголовки будут соответствовать заголовкам, которые были бы возвращены в ответе.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

Заголовки запроса:
  • If-None-Match – Токен ревизии документа в двойных кавычках

Заголовки ответа:
  • Content-Length – Размер документа

  • ETag – Токен ревизии документа в двойных кавычках

Коды состояния:
  • 200 OK – Документ существует

  • 304 Not Modified – Документ не изменялся после указанной ревизии

  • 401 Unauthorized – Требуются права на чтение

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Документ не найден

Запрос:

HEAD /db/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 660
Content-Type: application/json
Date: Tue, 13 Aug 2013 21:35:37 GMT
ETag: "12-151bb8678d45aaa949ec3698ef1c7e78"
Server: CouchDB (Erlang/OTP)
GET /{db}/{docid}

Возвращает документ с указанным docid из указанной db. Если не запрашивается конкретная ревизия, всегда возвращается последняя ревизия документа.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

Заголовки запроса:
  • Accept –

    • application/json

    • multipart/related

    • multipart/mixed

    • text/plain

  • If-None-Match – Токен ревизии документа в двойных кавычках

Параметры запроса:
  • attachments (boolean) – Включает содержимое вложений в ответ. Значение по умолчанию: false

  • att_encoding_info (boolean) – Включает сведения о кодировании в заглушки вложений, если соответствующее вложение сжато. Значение по умолчанию: false.

  • atts_since (array) – Включает вложения только начиная с указанных ревизий. Не включает вложения для указанных ревизий. Необязательно

  • conflicts (boolean) – Включает сведения о конфликтах в документе. Значение по умолчанию: false

  • deleted_conflicts (boolean) – Включает сведения об удаленных конфликтующих ревизиях. Значение по умолчанию: false

  • latest (boolean) – Принудительно получает последнюю «листовую» ревизию независимо от того, какая ревизия rev была запрошена. Значение по умолчанию: false

  • local_seq (boolean) – Включает последовательность последнего обновления документа. Значение по умолчанию: false

  • meta (boolean) – Работает так же, как указание всех параметров запроса conflicts, deleted_conflicts и revs_info. Значение по умолчанию: false

  • open_revs (array) – Получает документы указанных листовых ревизий. Кроме того, принимает значение all для возврата всех листовых ревизий. Необязательно

  • rev (string) – Получает документ указанной ревизии. Необязательно

  • revs (boolean) – Включает список всех известных ревизий документа. Значение по умолчанию: false

  • revs_info (boolean) – Включает подробные сведения обо всех известных ревизиях документа. Значение по умолчанию: false

Заголовки ответа:
  • Content-Type –

    • application/json

    • multipart/related

    • multipart/mixed

    • text/plain; charset=utf-8

  • ETag – Токен ревизии документа в двойных кавычках. Недоступен при получении сведений, связанных с конфликтами

  • Transfer-Encoding – chunked. Доступен при запросе с параметром open_revs

Объект JSON ответа:
  • _id (string) – Идентификатор документа

  • _rev (string) – Токен MVCC ревизии

  • _deleted (boolean) – Флаг удаления. Доступен, если документ был удален

  • _attachments (object) – Заглушки вложений. Доступны, если у документа есть вложения

  • _conflicts (array) – Список конфликтующих ревизий. Доступен при запросе с параметром conflicts=true

  • _deleted_conflicts (array) – Список удаленных конфликтующих ревизий. Доступен при запросе с параметром deleted_conflicts=true

  • _local_seq (string) – Последовательность обновления документа в текущей базе данных. Доступна при запросе с параметром local_seq=true

  • _revs_info (array) – Список объектов со сведениями о локальных ревизиях и их состоянии. Доступен при запросе с параметром open_revs

  • _revisions (object) – Список локальных токенов ревизий без. Доступен при запросе с параметром revs=true

Коды состояния:
  • 200 OK – Запрос успешно выполнен

  • 304 Not Modified – Документ не изменялся после указанной ревизии

  • 400 Bad Request – Неверный формат запроса или ревизии

  • 401 Unauthorized – Требуются права на чтение

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Документ не найден

Запрос:

GET /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 660
Content-Type: application/json
Date: Tue, 13 Aug 2013 21:35:37 GMT
ETag: "1-917fa2381192822767f010b95b45325b"
Server: CouchDB (Erlang/OTP)

{
    "_id": "SpaghettiWithMeatballs",
    "_rev": "1-917fa2381192822767f010b95b45325b",
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}
PUT /{db}/{docid}

Метод PUT создает новый документ с заданным именем или новую ревизию существующего документа. В отличие от метода POST /{db}, необходимо указать идентификатор документа в URL запроса.

При обновлении существующего документа текущая ревизия документа должна быть включена в документ (то есть в тело запроса), указана как параметр запроса rev или в заголовке запроса If-Match.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

  • Content-Type –

    • application/json

    • multipart/related

  • If-Match – Ревизия документа. Альтернатива параметру запроса rev или ключу документа. Необязательно

Параметры запроса:
  • rev (string) – Ревизия документа при обновлении существующего документа. Альтернатива заголовку If-Match или ключу документа. Необязательно

  • batch (string) – Сохраняет документ в пакетном режиме. Возможные значения: ok. Необязательно

  • new_edits (boolean) – Запрещает вставку конфликтующего документа. Возможные значения: true (по умолчанию) и false. Если задано false, в документ необходимо включить корректно сформированный _rev. new_edits=false используется репликатором для вставки документов в целевую базу данных, даже если это приводит к возникновению конфликтов. Необязательно, Значение ``false`` предназначено только для использования репликатором.

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

    • multipart/related

  • ETag – Новая ревизия документа в кавычках

  • Location – URI документа

Объект JSON ответа:
  • id (string) – Идентификатор документа

  • ok (boolean) – Статус операции

  • rev (string) – Токен MVCC ревизии

Коды состояния:
  • 201 Created – Документ создан и сохранен на диске

  • 202 Accepted – Данные документа приняты, но еще не сохранены на диске

  • 400 Bad Request – Недопустимое тело запроса или параметры

  • 401 Unauthorized – Требуются права на запись

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных или идентификатор документа не существует

  • 409 Conflict – Документ с указанным идентификатором уже существует или указанная ревизия не является последней для целевого документа

Запрос:

PUT /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Content-Length: 196
Content-Type: application/json
Host: localhost:5984

{
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 85
Content-Type: application/json
Date: Wed, 14 Aug 2013 20:31:39 GMT
ETag: "1-917fa2381192822767f010b95b45325b"
Location: http://localhost:5984/recipes/SpaghettiWithMeatballs
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs",
    "ok": true,
    "rev": "1-917fa2381192822767f010b95b45325b"
}
DELETE /{db}/{docid}

Помечает указанный документ как удаленный, добавляя поле _deleted со значением true. Документы с этим полем больше не возвращаются в ответах на запросы, но остаются в базе данных. Необходимо указать текущую (последнюю) ревизию, используя параметр rev или заголовок If-Match, чтобы указать ревизию.

Примечание

CouchDB не удаляет указанный документ полностью. Вместо этого она оставляет надгробие с самой необходимой информацией о документе. Надгробие требуется для репликации действия удаления между базами данных.

См. также

Получение удаленных документов

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

  • If-Match – Ревизия документа. Альтернатива параметру запроса rev

Параметры запроса:
  • rev (string) – Текущая ревизия документа

  • batch (string) – Сохраняет документ в пакетном режиме. Возможные значения: ok. Необязательно

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

  • ETag – Новая ревизия документа в двойных кавычках

Объект JSON ответа:
  • id (string) – Идентификатор документа

  • ok (boolean) – Статус операции

  • rev (string) – Токен MVCC ревизии

Коды состояния:
  • 200 OK – Документ успешно удален

  • 202 Accepted – Запрос принят, но изменения еще не сохранены на диске

  • 400 Bad Request – Недопустимое тело запроса или параметры

  • 401 Unauthorized – Требуются права на запись

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных или идентификатор документа не существует

  • 409 Conflict – Указанная ревизия не является последней для целевого документа

Запрос:

DELETE /recipes/FishStew?rev=1-9c65296036141e575d32ba9c034dd3ee HTTP/1.1
Accept: application/json
Host: localhost:5984

Вместо параметра запроса rev можно использовать заголовок If-Match:

DELETE /recipes/FishStew HTTP/1.1
Accept: application/json
If-Match: 1-9c65296036141e575d32ba9c034dd3ee
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 71
Content-Type: application/json
Date: Wed, 14 Aug 2013 12:23:13 GMT
ETag: "2-056f5f44046ecafc08a2bc2b9c229e20"
Server: CouchDB (Erlang/OTP)

{
    "id": "FishStew",
    "ok": true,
    "rev": "2-056f5f44046ecafc08a2bc2b9c229e20"
}
COPY /{db}/{docid}

Метод COPY (нестандартный метод HTTP) копирует существующий документ в новый или существующий документ. Копирование документа возможно только в пределах одной базы данных.

Исходный документ указывается в строке запроса, а целевой документ — в заголовке запроса Destination.

Параметры:
  • db – Имя базы данных

  • docid – Идентификатор документа

Заголовки запроса:
  • Accept –

    • application/json

    • text/plain

  • Destination – Целевой документ. Должен содержать идентификатор целевого документа и, при копировании в существующий документ, может содержать его ревизию. См. Копирование в существующий документ.

  • If-Match – Ревизия исходного документа. Альтернатива параметру запроса rev

Параметры запроса:
  • rev (string) – Ревизия, из которой выполняется копирование. Необязательно

  • batch (string) – Сохраняет документ в пакетном режиме. Возможные значения: ok. Необязательно

Заголовки ответа:
  • Content-Type –

    • application/json

    • text/plain; charset=utf-8

  • ETag – Новая ревизия документа в двойных кавычках

  • Location – URI документа

Объект JSON ответа:
  • id (string) – Идентификатор документа

  • ok (boolean) – Статус операции

  • rev (string) – Токен MVCC ревизии

Коды состояния:
  • 201 Created – Документ успешно создан

  • 202 Accepted – Запрос принят, но изменения еще не сохранены на диске

  • 400 Bad Request – Недопустимое тело запроса или параметры

  • 401 Unauthorized – Требуются права на чтение или запись

  • 403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учетными данными

  • 404 Not Found – Указанная база данных, идентификатор документа или ревизия не существуют

  • 409 Conflict – Документ с указанным идентификатором уже существует или указанная ревизия не является последней для целевого документа

Запрос:

COPY /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Destination: SpaghettiWithMeatballs_Italian
Host: localhost:5984

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 93
Content-Type: application/json
Date: Wed, 14 Aug 2013 14:21:00 GMT
ETag: "1-e86fdf912560c2321a5fcefc6264e6d9"
Location: http://localhost:5984/recipes/SpaghettiWithMeatballs_Italian
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs_Italian",
    "ok": true,
    "rev": "1-e86fdf912560c2321a5fcefc6264e6d9"
}

Вложения

Если документ содержит вложения, возвращаемая структура будет содержать сводную информацию о связанных с документом вложениях, но не сами данные вложений.

JSON возвращаемого документа будет содержать поле _attachments с одним или несколькими описаниями вложений.

Ключи объекта _attachments — это имена вложений, а значения — информационные объекты следующей структуры:

  • content_type (строка): MIME-тип вложения

  • data (строка): Содержимое в кодировке Base64. Доступно, если содержимое вложения запрашивается с помощью следующих параметров запроса:

    • attachments=true при запросе документа

    • attachments=true&include_docs=true при запросе ленты изменений или представления

    • atts_since.

  • digest (строка): Хеш-дайджест содержимого. Начинается с префикса, указывающего тип хеша (md5-), за которым следует хеш-дайджест в кодировке Base64

  • encoded_length (число): Размер сжатого вложения в байтах. Доступно, если при добавлении вложения content_type входит в list of compressible types и указаны следующие параметры запроса:

    • att_encoding_info=true при запросе документа

    • att_encoding_info=true&include_docs=true при запросе ленты изменений или представления

  • encoding (строка): Кодек сжатия. Доступно, если при добавлении вложения content_type входит в list of compressible types и указаны следующие параметры запроса:

    • att_encoding_info=true при запросе документа

    • att_encoding_info=true&include_docs=true при запросе ленты изменений или представления

  • length (число): Фактический размер вложения в байтах. Недоступно, если запрошено содержимое вложения

  • revpos (число): Номер ревизии, в которой было добавлено вложение

  • stub (логическое значение): Имеет значение true, если объект содержит информацию-заглушку, но не содержимое. В противном случае не включается в ответ

Основная информация о вложениях

Запрос:

GET /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 660
Content-Type: application/json
Date: Tue, 13 Aug 2013 21:35:37 GMT
ETag: "5-fd96acb3256302bf0dd2f32713161f2a"
Server: CouchDB (Erlang/OTP)

{
    "_attachments": {
        "grandma_recipe.txt": {
            "content_type": "text/plain",
            "digest": "md5-Ids41vtv725jyrN7iUvMcQ==",
            "length": 1872,
            "revpos": 4,
            "stub": true
        },
        "my_recipe.txt": {
            "content_type": "text/plain",
            "digest": "md5-198BPPNiT5fqlLxoYYbjBA==",
            "length": 85,
            "revpos": 5,
            "stub": true
        },
        "photo.jpg": {
            "content_type": "image/jpeg",
            "digest": "md5-7Pv4HW2822WY1r/3WDbPug==",
            "length": 165504,
            "revpos": 2,
            "stub": true
        }
    },
    "_id": "SpaghettiWithMeatballs",
    "_rev": "5-fd96acb3256302bf0dd2f32713161f2a",
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Получение содержимого вложений

Можно получить документ со всем содержимым прикреплённых файлов, используя параметр запроса attachments=true:

Запрос:

GET /db/pixel?attachments=true HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 553
Content-Type: application/json
Date: Wed, 14 Aug 2013 11:32:40 GMT
ETag: "4-f1bcae4bf7bbb92310079e632abfe3f4"
Server: CouchDB (Erlang/OTP)

{
    "_attachments": {
        "pixel.gif": {
            "content_type": "image/gif",
            "data": "R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
            "digest": "md5-2JdGiI2i2VELZKnwMers1Q==",
            "revpos": 2
        },
        "pixel.png": {
            "content_type": "image/png",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAAXNSR0IArs4c6QAAAANQTFRFAAAAp3o92gAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QgOCx8VHgmcNwAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=",
            "digest": "md5-Dgf5zxgGuchWrve73evvGQ==",
            "revpos": 3
        }
    },
    "_id": "pixel",
    "_rev": "4-f1bcae4bf7bbb92310079e632abfe3f4"
}

Или получить содержимое прикреплённых файлов начиная с определённой ревизии, используя параметр запроса atts_since:

Запрос:

GET /recipes/SpaghettiWithMeatballs?atts_since=[%224-874985bc28906155ba0e2e0538f67b05%22]  HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 760
Content-Type: application/json
Date: Tue, 13 Aug 2013 21:35:37 GMT
ETag: "5-fd96acb3256302bf0dd2f32713161f2a"
Server: CouchDB (Erlang/OTP)

{
    "_attachments": {
        "grandma_recipe.txt": {
            "content_type": "text/plain",
            "digest": "md5-Ids41vtv725jyrN7iUvMcQ==",
            "length": 1872,
            "revpos": 4,
            "stub": true
        },
        "my_recipe.txt": {
            "content_type": "text/plain",
            "data": "MS4gQ29vayBzcGFnaGV0dGkKMi4gQ29vayBtZWV0YmFsbHMKMy4gTWl4IHRoZW0KNC4gQWRkIHRvbWF0byBzYXVjZQo1LiAuLi4KNi4gUFJPRklUIQ==",
            "digest": "md5-198BPPNiT5fqlLxoYYbjBA==",
            "revpos": 5
        },
        "photo.jpg": {
            "content_type": "image/jpeg",
            "digest": "md5-7Pv4HW2822WY1r/3WDbPug==",
            "length": 165504,
            "revpos": 2,
            "stub": true
        }
    },
    "_id": "SpaghettiWithMeatballs",
    "_rev": "5-fd96acb3256302bf0dd2f32713161f2a",
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Эффективное получение нескольких вложений

Как отмечалось выше, получение документа с attachments=true возвращает большой объект JSON, содержащий все вложения. Если документ и файлы небольшие, это не проблема, но если к документу прикреплены крупные файлы, например мультимедийные (аудио/видео), обработка такого ответа может быть очень затратной.

Для решения этой проблемы CouchDB позволяет получать документы в формате multipart/related:

Запрос:

GET /recipes/secret?attachments=true HTTP/1.1
Accept: multipart/related
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Content-Length: 538
Content-Type: multipart/related; boundary="e89b3e29388aef23453450d10e5aaed0"
Date: Sat, 28 Sep 2013 08:08:22 GMT
ETag: "2-c1c6c44c4bc3c9344b037c8690468605"
Server: CouchDB (Erlang OTP)

--e89b3e29388aef23453450d10e5aaed0
Content-Type: application/json

{"_id":"secret","_rev":"2-c1c6c44c4bc3c9344b037c8690468605","_attachments":{"recipe.txt":{"content_type":"text/plain","revpos":2,"digest":"md5-HV9aXJdEnu0xnMQYTKgOFA==","length":86,"follows":true}}}
--e89b3e29388aef23453450d10e5aaed0
Content-Disposition: attachment; filename="recipe.txt"
Content-Type: text/plain
Content-Length: 86

1. Take R
2. Take E
3. Mix with L
4. Add some A
5. Serve with X

--e89b3e29388aef23453450d10e5aaed0--

В этом ответе документ содержит только краткую информацию-заглушку о вложениях, а все вложения передаются как отдельные сущности, что уменьшает объём используемой памяти и накладные расходы на обработку (вы заметили, что содержимое вложений передаётся в виде необработанных данных, а не в кодировке Base64?).

Получение информации о кодировании вложений

С помощью параметра запроса att_encoding_info=true можно получить сведения о размере сжатых вложений и используемом кодеке.

Запрос:

GET /recipes/SpaghettiWithMeatballs?att_encoding_info=true HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 736
Content-Type: application/json
Date: Tue, 13 Aug 2013 21:35:37 GMT
ETag: "5-fd96acb3256302bf0dd2f32713161f2a"
Server: CouchDB (Erlang/OTP)

{
    "_attachments": {
        "grandma_recipe.txt": {
            "content_type": "text/plain",
            "digest": "md5-Ids41vtv725jyrN7iUvMcQ==",
            "encoded_length": 693,
            "encoding": "gzip",
            "length": 1872,
            "revpos": 4,
            "stub": true
        },
        "my_recipe.txt": {
            "content_type": "text/plain",
            "digest": "md5-198BPPNiT5fqlLxoYYbjBA==",
            "encoded_length": 100,
            "encoding": "gzip",
            "length": 85,
            "revpos": 5,
            "stub": true
        },
        "photo.jpg": {
            "content_type": "image/jpeg",
            "digest": "md5-7Pv4HW2822WY1r/3WDbPug==",
            "length": 165504,
            "revpos": 2,
            "stub": true
        }
    },
    "_id": "SpaghettiWithMeatballs",
    "_rev": "5-fd96acb3256302bf0dd2f32713161f2a",
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Создание нескольких вложений

Чтобы создать документ с несколькими вложениями за один запрос, достаточно встроить данные вложений в кодировке Base64 в тело документа:

{
  "_id":"multiple_attachments",
  "_attachments":
  {
    "foo.txt":
    {
      "content_type":"text\/plain",
      "data": "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ="
    },

   "bar.txt":
    {
      "content_type":"text\/plain",
      "data": "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ="
    }
  }
}

Также можно эффективнее загрузить документ с вложениями в формате multipart/related. Это избавляет от необходимости кодировать вложения в Base64, экономя ресурсы процессора и пропускную способность. Для этого задайте для заголовка Content-Type запроса PUT /{db}/{docid} значение multipart/related.

Первая часть MIME-тела — это сам документ, для которого необходимо указать собственный Content-Type со значением application/json". Также в документе должен содержаться объект метаданных _attachments, в котором у каждого объекта вложения есть ключ follows со значением true.

Последующие части MIME-тела содержат вложения.

Запрос:

PUT /temp/somedoc HTTP/1.1
Accept: application/json
Content-Length: 372
Content-Type: multipart/related;boundary="abc123"
Host: localhost:5984
User-Agent: HTTPie/0.6.0

--abc123
Content-Type: application/json

{
    "body": "This is a body.",
    "_attachments": {
        "foo.txt": {
            "follows": true,
            "content_type": "text/plain",
            "length": 21
        },
        "bar.txt": {
            "follows": true,
            "content_type": "text/plain",
            "length": 20
        }
    }
}

--abc123

this is 21 chars long
--abc123

this is 20 chars lon
--abc123--

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 72
Content-Type: application/json
Date: Sat, 28 Sep 2013 09:13:24 GMT
ETag: "1-5575e26acdeb1df561bb5b70b26ba151"
Location: http://localhost:5984/temp/somedoc
Server: CouchDB (Erlang OTP)

{
    "id": "somedoc",
    "ok": true,
    "rev": "1-5575e26acdeb1df561bb5b70b26ba151"
}

Получение списка ревизий

Список ревизий заданного документа можно получить, добавив параметр revs=true к URL запроса:

Запрос:

GET /recipes/SpaghettiWithMeatballs?revs=true  HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 584
Content-Type: application/json
Date: Wed, 14 Aug 2013 11:38:26 GMT
ETag: "5-fd96acb3256302bf0dd2f32713161f2a"
Server: CouchDB (Erlang/OTP)

{
    "_id": "SpaghettiWithMeatballs",
    "_rev": "8-6f5ad8db0f34af24a6e0984cd1a6cfb9",
    "_revisions": {
        "ids": [
            "6f5ad8db0f34af24a6e0984cd1a6cfb9",
            "77fba3a059497f51ec99b9b478b569d2",
            "136813b440a00a24834f5cb1ddf5b1f1",
            "fd96acb3256302bf0dd2f32713161f2a",
            "874985bc28906155ba0e2e0538f67b05",
            "0de77a37463bf391d14283e626831f2e",
            "d795d1b924777732fdea76538c558b62",
            "917fa2381192822767f010b95b45325b"
        ],
        "start": 8
    },
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Возвращаемая структура JSON включает исходный документ, в том числе структуру _revisions со сведениями о ревизиях в следующем формате:

  • ids (массив): Массив действительных идентификаторов ревизий в обратном порядке (сначала последняя)

  • start (число): Номер префикса последней ревизии

Получение расширенной истории ревизий

Дополнительные сведения о ревизиях заданного документа можно получить, передав в запрос аргумент revs_info:

Запрос:

GET /recipes/SpaghettiWithMeatballs?revs_info=true  HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 802
Content-Type: application/json
Date: Wed, 14 Aug 2013 11:40:55 GMT
Server: CouchDB (Erlang/OTP)

{
    "_id": "SpaghettiWithMeatballs",
    "_rev": "8-6f5ad8db0f34af24a6e0984cd1a6cfb9",
    "_revs_info": [
        {
            "rev": "8-6f5ad8db0f34af24a6e0984cd1a6cfb9",
            "status": "available"
        },
        {
            "rev": "7-77fba3a059497f51ec99b9b478b569d2",
            "status": "deleted"
        },
        {
            "rev": "6-136813b440a00a24834f5cb1ddf5b1f1",
            "status": "available"
        },
        {
            "rev": "5-fd96acb3256302bf0dd2f32713161f2a",
            "status": "missing"
        },
        {
            "rev": "4-874985bc28906155ba0e2e0538f67b05",
            "status": "missing"
        },
        {
            "rev": "3-0de77a37463bf391d14283e626831f2e",
            "status": "missing"
        },
        {
            "rev": "2-d795d1b924777732fdea76538c558b62",
            "status": "missing"
        },
        {
            "rev": "1-917fa2381192822767f010b95b45325b",
            "status": "missing"
        }
    ],
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Возвращаемый документ содержит поле _revs_info с расширенной информацией о ревизиях, включая доступность и состояние каждой ревизии. Это поле-массив содержит объекты следующей структуры:

  • rev (строка): Полная строка ревизии

  • status (строка): Состояние ревизии. Возможные значения:

    • available: Ревизия доступна для получения с помощью параметра запроса rev

    • missing: Ревизия недоступна

    • deleted: Ревизия относится к удалённому документу

Получение определённой ревизии

Чтобы получить определённую ревизию, используйте аргумент rev в запросе и укажите полный номер ревизии. Будет возвращена указанная ревизия документа, включая поле _rev, в котором указана запрошенная ревизия.

Запрос:

GET /recipes/SpaghettiWithMeatballs?rev=6-136813b440a00a24834f5cb1ddf5b1f1  HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 271
Content-Type: application/json
Date: Wed, 14 Aug 2013 11:40:55 GMT
Server: CouchDB (Erlang/OTP)

{
    "_id": "SpaghettiWithMeatballs",
    "_rev": "6-136813b440a00a24834f5cb1ddf5b1f1",
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs"
}

Получение удалённых документов

CouchDB фактически не удаляет документы с помощью DELETE /{db}/{docid}. Вместо этого она оставляет запись-заглушку с самой необходимой информацией о документе. Если просто выполнить GET /{db}/{docid}, CouchDB вернёт ответ 404 Not Found:

Запрос:

GET /recipes/FishStew  HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 404 Object Not Found
Cache-Control: must-revalidate
Content-Length: 41
Content-Type: application/json
Date: Wed, 14 Aug 2013 12:23:27 GMT
Server: CouchDB (Erlang/OTP)

{
    "error": "not_found",
    "reason": "deleted"
}

Однако запись-заглушку документа можно получить, используя параметр запроса rev в запросе GET /{db}/{docid}:

Запрос:

GET /recipes/FishStew?rev=2-056f5f44046ecafc08a2bc2b9c229e20  HTTP/1.1
Accept: application/json
Host: localhost:5984

Ответ:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 79
Content-Type: application/json
Date: Wed, 14 Aug 2013 12:30:22 GMT
ETag: "2-056f5f44046ecafc08a2bc2b9c229e20"
Server: CouchDB (Erlang/OTP)

{
    "_deleted": true,
    "_id": "FishStew",
    "_rev": "2-056f5f44046ecafc08a2bc2b9c229e20"
}

Обновление существующего документа

Чтобы обновить существующий документ, необходимо указать текущий номер ревизии в параметре _rev.

Запрос:

PUT /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Content-Length: 258
Content-Type: application/json
Host: localhost:5984

{
    "_rev": "1-917fa2381192822767f010b95b45325b",
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs",
    "serving": "hot"
}

Также можно указать текущий номер ревизии в HTTP-заголовке запроса If-Match:

PUT /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Content-Length: 258
Content-Type: application/json
If-Match: 1-917fa2381192822767f010b95b45325b
Host: localhost:5984

{
    "description": "An Italian-American dish that usually consists of spaghetti, tomato sauce and meatballs.",
    "ingredients": [
        "spaghetti",
        "tomato sauce",
        "meatballs"
    ],
    "name": "Spaghetti with meatballs",
    "serving": "hot"
}

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 85
Content-Type: application/json
Date: Wed, 14 Aug 2013 20:33:56 GMT
ETag: "2-790895a73b63fb91dd863388398483dd"
Location: http://localhost:5984/recipes/SpaghettiWithMeatballs
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs",
    "ok": true,
    "rev": "2-790895a73b63fb91dd863388398483dd"
}

Копирование из определённой ревизии

Чтобы скопировать из определённой версии, используйте аргумент rev в строке запроса или заголовок If-Match:

Запрос:

COPY /recipes/SpaghettiWithMeatballs HTTP/1.1
Accept: application/json
Destination: SpaghettiWithMeatballs_Original
If-Match: 1-917fa2381192822767f010b95b45325b
Host: localhost:5984

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 93
Content-Type: application/json
Date: Wed, 14 Aug 2013 14:21:00 GMT
ETag: "1-917fa2381192822767f010b95b45325b"
Location: http://localhost:5984/recipes/SpaghettiWithMeatballs_Original
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs_Original",
    "ok": true,
    "rev": "1-917fa2381192822767f010b95b45325b"
}

Копирование в существующий документ

Чтобы скопировать данные в существующий документ, необходимо указать текущую строку ревизии целевого документа, добавив параметр rev к строке заголовка Destination.

Запрос:

COPY /recipes/SpaghettiWithMeatballs?rev=8-6f5ad8db0f34af24a6e0984cd1a6cfb9 HTTP/1.1
Accept: application/json
Destination: SpaghettiWithMeatballs_Original?rev=1-917fa2381192822767f010b95b45325b
Host: localhost:5984

Ответ:

HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 93
Content-Type: application/json
Date: Wed, 14 Aug 2013 14:21:00 GMT
ETag: "2-62e778c9ec09214dd685a981dcc24074""
Location: http://localhost:5984/recipes/SpaghettiWithMeatballs_Original
Server: CouchDB (Erlang/OTP)

{
    "id": "SpaghettiWithMeatballs_Original",
    "ok": true,
    "rev": "2-62e778c9ec09214dd685a981dcc24074"
}

Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/api/document/common.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API