/{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) – Включает содержимое вложений в ответ. Значение по умолчанию:
falseatt_encoding_info (boolean) – Включает сведения о кодировании в заглушки вложений, если соответствующее вложение сжато. Значение по умолчанию:
false.atts_since (array) – Включает вложения только начиная с указанных ревизий. Не включает вложения для указанных ревизий. Необязательно
conflicts (boolean) – Включает сведения о конфликтах в документе. Значение по умолчанию:
falsedeleted_conflicts (boolean) – Включает сведения об удаленных конфликтующих ревизиях. Значение по умолчанию:
falselatest (boolean) – Принудительно получает последнюю «листовую» ревизию независимо от того, какая ревизия rev была запрошена. Значение по умолчанию:
falselocal_seq (boolean) – Включает последовательность последнего обновления документа. Значение по умолчанию:
falsemeta (boolean) – Работает так же, как указание всех параметров запроса
conflicts,deleted_conflictsиrevs_info. Значение по умолчанию:falseopen_revs (array) – Получает документы указанных листовых ревизий. Кроме того, принимает значение
allдля возврата всех листовых ревизий. Необязательноrev (string) – Получает документ указанной ревизии. Необязательно
revs (boolean) – Включает список всех известных ревизий документа. Значение по умолчанию:
falserevs_info (boolean) – Включает подробные сведения обо всех известных ревизиях документа. Значение по умолчанию:
false
- Заголовки ответа:
-
-
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 – Идентификатор документа
- Заголовки запроса:
- Параметры запроса:
-
rev (string) – Ревизия документа при обновлении существующего документа. Альтернатива заголовку
If-Matchили ключу документа. Необязательноbatch (string) – Сохраняет документ в пакетном режиме. Возможные значения:
ok. Необязательноnew_edits (boolean) – Запрещает вставку конфликтующего документа. Возможные значения:
true(по умолчанию) иfalse. Если заданоfalse, в документ необходимо включить корректно сформированный_rev.new_edits=falseиспользуется репликатором для вставки документов в целевую базу данных, даже если это приводит к возникновению конфликтов. Необязательно, Значение ``false`` предназначено только для использования репликатором.
- Заголовки ответа:
- Объект 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 – Идентификатор документа
- Заголовки запроса:
- Параметры запроса:
-
rev (string) – Текущая ревизия документа
batch (string) – Сохраняет документ в пакетном режиме. Возможные значения:
ok. Необязательно
- Заголовки ответа:
-
-
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. Необязательно
- Заголовки ответа:
- Объект 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: Ревизия доступна для получения с помощью параметра запроса revmissing: Ревизия недоступна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