Azure CosmosDB REST 创建文档时出错

Man*_*ndM 3 azure azure-cosmosdb

尝试使用 REST API 创建文档时出现以下错误:

The input content is invalid because the required properties - 'id; ' - are missing
Run Code Online (Sandbox Code Playgroud)

在各种 SDK 中,包含一个可选参数disableAutomaticIdGeneration,如果true未提供 ID ,则设置为将拒绝带有此错误的请求。我正在发出一个非常简单的 REST 请求,所以我没有自己添加这个参数(我什至不知道什么标头——大概是一个标头——我会添加,因为 REST API 的文档没有涵盖它)。

唯一需要注意的是集合具有定义的分区键。我找不到说的ID是必需的任何文件,如果一个分区键定义,但似乎是这样。

除非有人能回答为什么会/可能会发生这种情况,否则我最终会考虑我的“它必须被定义-如果-分区-键-被定义”答案。

下面的请求(它不是裸 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"
}
Run Code Online (Sandbox Code Playgroud)

还有几个问题要解开……

创建文档文档指出id必需的,所以也许门户实际上是创造它的浏览器端,然后把它放置在引擎盖下的要求,但如果这是为什么用的情况下disableAutomaticIdGenerationSDK中的选项存在吗?

此外,相同的文档指出(突出显示是我的):

它是标识文档的唯一 ID,即任何两个文档不应共享相同的 ID。ID 不得超过 255 个字符。在未指定 ID 值的情况下创建文档时,会自动添加 ID 字段。但是,您始终可以通过在请求正文中为其分配自定义值来更新 ID 值。

通过粗体部分,似乎需要密钥 id,但也许我可以传递一个null或空字符串?但是,我尝试了这两种方法并且两次都出错(一个说这null是不允许的,另一个是字符串不能为空)。

Mat*_*nta 5

当前的 SDK 会自动生成缺失的ids 作为Guid值。Azure 门户使用 JS SDK,这就是为什么id如果您不添加它,您会看到门户体验为您创建。

REST API 上的文档似乎具有误导性,需要根据您共享的内容进行调整,因为 REST API 不会自动生成id,但它会验证它是否在有效负载中。

总之,如果您要实现自己的 REST 客户端,则可以添加自己的自动生成逻辑客户端(就像 SDK 那样),REST API 的必要条件是它包含在有效负载中。