对多个应用的记录进行批量处理

aki发表于:2016年11月21日 15:10:34更新于:2023年09月27日 14:45:39

对多个应用的记录进行批量处理

可对多个应用同时发送多个 API请求。

HTTP 方法

POST

URI

https://(子域名).cybozu.cn/k/v1/bulkRequest.json

来宾空间内的应用

https://(子域名).cybozu.cn/k/guest/<空间的ID>/v1/bulkRequest.json

  • 仅可批量更新同一个来宾空间内的应用,不可执行以下处理。

    • 批量更新不同来宾空间内的应用

    • 批量更新来宾空间及普通空间内的应用

    • 批量更新来宾空间内的应用及非空间内的应用

必要的访问权限

以要执行的API的必要权限为准。

请求参数

参数名称要指定的值必须说明
requests数组必须

要批量执行的API列表

最多20个请求。

requests[].method字符串必须要执行的API的HTTP方法
requests[].api字符串必须要执行的API的URL
requests[].payload
必须传递给API的参数。

请求的范例

请求头部

POST /k/v1/bulkRequest.json HTTP/1.1
Host: example.cybozu.cn:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json
  • 请在Content-Type中指定application/json。如不指定,JSON无法识别 ,执行时将报错。

正文

{
    "requests": [
        {
            "method": "POST",
            "api": "/k/v1/record.json",
            "payload": {
                "app": 1972,
                "record": {
                    "单行文本框": {
                        "value": "添加单行文本框。"
                    }
                }
            }
        },
        {
            "method": "PUT",
            "api": "/k/v1/record.json",
            "payload": {
                "app": 1973,
                "id": 33,
                "revision": 2,
                "record": {
                    "单行文本框": {
                        "value": "更新单行文本框。"
                    }
                }
            }
        },
        {
            "method": "POST",
            "api": "/k/v1/record.json",
            "payload": {
                "app": 1974,
                "record": {
                    "单行文本框": {
                        "value": "添加单行文本框。"
                    }
                }
            }
        }
    ]
}

应答

结果放在results数组内与requests同一索引的地方。

参数名称类型说明
results数组

对各个 API请求的应答

应答根据 requests的Array的排列顺序来排序。

如果有失败的API,只有该索引有结果,其后面的API不执行,直接返回 {} (空Object)。

成功时的范例

{
  "results": [
    {
      "id": "39",
      "revision": "1"
    },
    {
      "revision": "3"
    },
    {
      "id": "39",
      "revision": "1"
    }
  ]
}


失败时的范例

第2个PUT请求是没有找到更新id时报错的范例。 

    "results": [
        {},
        {
            "message": "找不到相应的记录(id: 33)。",
            "id": "1505999166-1940353231",
            "code": "GAIA_RE01"
        },
        {}
    ]
}

JavaScript 范例

使用API请求发送 kintone REST API 请求

var body = {
  "requests": [
      {
        "method": "POST",
        "api": "/k/v1/record.json",
        "payload": {
          "app": 1972,
          "record": {
            "单行文本框": {
              "value": "添加单行文本框。"
            }
          }
        }
      },
      {
        "method": "PUT",
        "api": "/k/v1/record.json",
        "payload": {
          "app": 1973,
          "id": 33,
          "revision": 2,
          "record": {
            "单行文本框": {
              "value": "更新单行文本框。"
            }
          }
        }
      },
      {
        "method": "POST",
        "api": "/k/v1/record.json",
          "payload": {
          "app": 1974,
          "record": {
            "单行文本框": {
              "value": "添加单行文本框。"
            }
          }
        }
      }
    ]
}
kintone.api(kintone.api.url('/k/v1/bulkRequest', true), 'POST', body, function(resp) {
    //success
    console.log(resp);
}, function(error) {
    //error
    console.log(error);
});


使用 XMLHttpRequest 请求

const body = {
  requests: [
    {
      method: 'POST',
      api: '/k/v1/record.json',
      payload: {
        app: 1972,
        record: {
          单行文本框: {
            value: '添加单行文本框。'
          }
        }
      }
    },
    {
      method: 'PUT',
      api: '/k/v1/record.json',
      payload: {
        app: 1973,
        id: 33,
        revision: 2,
        record: {
          单行文本框: {
            value: '更新单行文本框。'
          }
        }
      }
    },
    {
      method: 'POST',
      api: '/k/v1/record.json',
      payload: {
        app: 1974,
        record: {
          单行文本框: {
            value: '添加单行文本框。'
          }
        }
      }
    }
  ],
  // CSRF TOKEN: 在kintone中执行API(POST, PUT, DELETE)时需要设置
  "__REQUEST_TOKEN__": kintone.getRequestToken()
};

var url = 'https://{subdomain}.cybozu.cn/k/v1/bulkRequest.json';
var xhr = new XMLHttpRequest();
xhr.open('POST', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
    if (xhr.status === 200) {
        // success
        console.log(JSON.parse(xhr.responseText));
    } else {
        // error
        console.log(JSON.parse(xhr.responseText));
    }
};
xhr.send(JSON.stringify(body));