#rest #couchbase
#rest #couchbase
Вопрос:
Я хочу обновить документ couchbase с помощью REST API
ilceabcd1233.corp.abcd.com:8091/pools/default/корзины/{bucketName}/docs/{documentId}
Когда я нажимаю ниже команды CURL в postman, я получаю код ответа 200 OK с ответом в виде пустого массива json: []
CURL:
curl --location --request POST 'ilceabcd1233.corp.abcd.com:8091/pools/default/buckets/{bucketName}/docs/{documentId}'
--header 'Accept: application/json'
--header 'Content-Type: application/json'
--header 'Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9yff'
--data-raw '{"name": "Nisarg", "age": 50}'
Когда я извлекаю этот документ с помощью ниже CURL:
curl --location --request GET 'ilceabcd1233.corp.abcd.com:8091/pools/default/buckets/{bucketName}/docs/{documentId}'
--header 'Accept: application/json'
--header 'Authorization: Basic QWRtaW5pc3RyYXRvcjpBZG1pbmlzdHJhdG9yff'
он отвечает:
{
"meta": {
"id": "112176152456",
"rev": "4-1637ac65ed7900000000000002000006",
"att_reason": "invalid_json",
"expiration": 0,
"flags": 33554438
},
"base64": "",
"xattrs": {}
}
На веб-консоли Couchbase я вижу сообщение:
«Двоичный документ. Base64 недоступен»
Может кто-нибудь, пожалуйста, помогите, что я делаю не так?
Комментарии:
1. К вашему сведению, обновление документов через REST API не поддерживается. Этот API в основном существует для использования пользовательского интерфейса Couchbase. Вот почему этого нет в документации. Я не говорю, что не используйте его, но действуйте с осторожностью. Это может измениться или исчезнуть в будущих выпусках.
Ответ №1:
Хитрость здесь в том, что этот API фактически не принимает JSON. Он ищет application/x-www-form-urlencoded
. В противном случае предполагается, что вы храните двоичный документ. На самом деле вам нужна форма value
, которая сама содержит JSON. Например:
curl --location --request POST 'http://localhost:8091/pools/default/buckets/demo/docs/doc1'
--header 'Accept: application/json, text/plain, */*'
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'
--header 'Authorization: Basic QWRtaW5pc3RyYXRvcjpwYXNzd29yZA=='
--data-urlencode 'value={"foo": "bar"}'
И просто чтобы повторить мой комментарий, это недокументированная, неподдерживаемая конечная точка, которая действительно предназначена только для внутреннего использования. Вместо этого рекомендуется использовать SDK (например, Couchbase Java SDK, например) для чтения / записи документов. REST API предназначен для управления кластерами, а не для CRUD.
Комментарии:
1. Ты сделал мой день человеком! Отличная помощь 🙂 Большое спасибо @Matthew !!! 🙂