CloudKit 休息 API

CloudKit REST API

我正在尝试使用 CloudKit API 从我的服务器使用服务器到服务器密钥在 public 数据库中创建记录。我正在使用以下 shell 脚本生成 curl 命令。当我 运行 它时,苹果的回应只是说有一个内部错误。

{ "uuid" : "a6415feb-168b-4615-9577-10c5168d7d7c", "serverErrorCode" : "INTERNAL_ERROR" }

这是我正在使用的脚本:

#!/bin/sh

subpath=/database/1/iCloud.com.mycompany.myapp/development/public/records/modify
date=`date -u +"%Y-%m-%dT%H:%M:%SZ"`

body='
{
  "operations": [
    {
      "operationType": "forceReplace",
      "record": {
        "recordType": "Drawing",
        "fields": {
          "date": "2021-01-09T12:00:00Z",
          "numbers": [14, 26, 38, 45, 46, 13],
          "type": 1
        }
      },
      "recordName": "powerball20210109"
    }
  ],
  "atomic": true
}
'

encoded=`echo $body | base64`
signature="$date:$encoded:$subpath"


curl -X POST https://api.apple-cloudkit.com$subpath \
        -H 'Content-Type: application/json' \
        -H 'X-Apple-Cloudkit-Request-KeyID: myKeyHere' \
        -H "X-Apple-CloudKit-Request-ISO8601Date: $date" \
        -H "X-Apple-CloudKit-Request-SignatureV1: $signature" \
        -d "$body"

CloudKit 架构将绘图显示为具有三个属性的自定义类型:

我可以看到几个问题。所有字段都需要有一个带有 value 属性 的对象。此外,自 1970 年 1 月 1 日起,日期以毫秒格式保存到 CloudKit。

我从未尝试过像那样保存整数数组,但它看起来不错。

试试这个:

"fields":{
  "date": { "value" : 1610193600000 },
  "numbers": { "value" : [14, 26, 38, 45, 46, 13] },
  "type": { "value" : 1 }
}