Не удалось обновить документ couchbase с помощью POST REST API

#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 !!! 🙂