Ошибка создания документа Azure CosmosDB REST - PullRequest
1 голос
/ 25 марта 2019

При попытке создать документ с помощью API REST появляется следующая ошибка:

The input content is invalid because the required properties - 'id; ' - are missing

В различных SDK есть необязательный параметр для включения disableAutomaticIdGeneration, который при значении true отклонит запрос с этой ошибкой, если идентификатор не указан. Я делаю довольно простой запрос REST, поэтому я не добавляю этот параметр сам (и я даже не знаю, какой заголовок - предположительно заголовок) я бы добавил, потому что документация по API REST не охватывает это).

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

Если кто-то не может ответить на вопрос, почему это происходит / может происходить, я собираюсь рассмотреть мой ответ "это должно быть определено, если ключ раздела определен" the ответ в конце концов.

Запрос ниже (это не пустой HTTP, а вот содержимое):

{
    "headers": {
        "content-type": "application/json",
        "x-ms-version": "2017-02-22",
        "x-ms-date": "Mon, 25 Mar 2019 17:57:03 GMT"
    },
    "body": {
        "data": "myData",
        // "id": "some_id" //I don't want to do this because I want Cosmos to auto-generate this like when I create a document in the Portal!
    },
    "method": "post",
    "url": "https://my-database-server.documents.azure.com/dbs/MyDatabase/colls/MyCollection/docs"
}

Еще несколько вопросов, чтобы распутать ...

Документация Create * гласит, что id является Обязательным , поэтому, возможно, Портал фактически создает его на стороне браузера и затем включает его в запрос под капотом, но если это так, почему в SDK существует опция disableAutomaticIdGeneration?

Также в той же документации говорится (выделение мое):

Это уникальный идентификатор, который идентифицирует документ, то есть никакие два документа не должны иметь один и тот же идентификатор. Идентификатор не должен превышать 255 символов. Поле идентификатора автоматически добавляется при создании документа без указания значения идентификатора . Однако вы всегда можете обновить значение идентификатора, назначив ему пользовательское значение в теле запроса.

По жирному сечению кажется, что требуется ключ id, но, может быть, я могу пропустить null или пустую строку? Но я попробовал оба из них и получил ошибки оба раза (один сказал, что null не разрешен, а другой состоял в том, что строка не может быть пустой).

1 Ответ

3 голосов
/ 25 марта 2019

Текущие SDK автоматически генерируют пропущенные id s как значения Guid. Портал Azure использует JS SDK, поэтому вы видите, что портал создает для вас id, если вы его не добавляете.

Документация по REST API кажется вводящей в заблуждение, и ее необходимо корректировать с учетом того, чем вы делитесь, поскольку REST API не будет автоматически генерировать id, но будет проверять, что он находится в полезной нагрузке.

Таким образом, если вы реализуете свой собственный клиент REST, вы можете добавить свою собственную клиентскую сторону с автогенерацией (как это делают SDK), реквизит REST API заключается в том, что он включен в полезную нагрузку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...