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

aki发表于:2016年11月21日 15:10:34更新于:2022年04月01日 14:52:13

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

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

HTTP 方法

POST

URI

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

来宾空间内的应用

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

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

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

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

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

必要的访问权限

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

请求参数

参数名称要指定的值必须说明
requests数组必须要批量调用的请求。最多20个。
requests[].method字符串必须要调用的API方法
requests[].api字符串必须要调用的API路径
  • 来宾空间内的应用

/k/guest/<来宾空间的ID>/v1/<命令>.json 。
requests[].payload
必须传递给API的参数。内容及类型以要调用的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": "DELETE",
            "api": "/k/v1/records.json",
            "payload": {
                "app": 1974,
                "ids": [
                    10,
                    11
                ],
                "revisions": [
                    1,
                    1
                ]
            }
        }
    ]
}

应答

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

参数名称类型说明
results数组对各个 API请求的应答。应答根据 requests的Array的排列顺序来排序。

成功时的范例

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


失败时的范例

第2个PUT请求是没有找到更新id时报错的范例。 如果有失败的API,只有该索引有结果,其后面的API不执行,直接返回 {} (空Object)。

{
    "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": "DELETE",
            "api": "/k/v1/records.json",
            "payload": {
                "app": 1974,
                "ids": [
                    10,
                    11
                ],
                "revisions": [
                    1,
                    1
                ]
            }
        }
    ]
}
kintone.api(kintone.api.url('/k/v1/bulkRequest', true), 'POST', body, function(resp) {
    //success
    console.log(resp);
}, function(error) {
    //error
    console.log(error);
});


使用 XMLHttpRequest 请求

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": "DELETE",
            "api": "/k/v1/records.json",
            "payload": {
                "app": 1974,
                "ids": [
                    10,
                    11
                ],
                "revisions": [
                    1,
                    1
                ]
            }
        }
    ],
    // 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));