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
是必需的,所以也许门户实际上是创造它的浏览器端,然后把它放置在引擎盖下的要求,但如果这是为什么用的情况下disableAutomaticIdGeneration
SDK中的选项存在吗?
此外,相同的文档指出(突出显示是我的):
它是标识文档的唯一 ID,即任何两个文档不应共享相同的 ID。ID 不得超过 255 个字符。在未指定 ID 值的情况下创建文档时,会自动添加 ID 字段。但是,您始终可以通过在请求正文中为其分配自定义值来更新 ID 值。
通过粗体部分,似乎需要密钥 id
,但也许我可以传递一个null
或空字符串?但是,我尝试了这两种方法并且两次都出错(一个说这null
是不允许的,另一个是字符串不能为空)。
当前的 SDK 会自动生成缺失的id
s 作为Guid
值。Azure 门户使用 JS SDK,这就是为什么id
如果您不添加它,您会看到门户体验为您创建。
REST API 上的文档似乎具有误导性,需要根据您共享的内容进行调整,因为 REST API 不会自动生成id
,但它会验证它是否在有效负载中。
总之,如果您要实现自己的 REST 客户端,则可以添加自己的自动生成逻辑客户端(就像 SDK 那样),REST API 的必要条件是它包含在有效负载中。
归档时间: |
|
查看次数: |
1657 次 |
最近记录: |