更新时间:2023-05-22 GMT+08:00

以JSON文件的方式传递API参数

KooCLI调用云服务的API时,如果API的参数过多,不便直接在命令中传入,用户可通过“--cli-jsonInput”将云服务API的部分或全部参数以JSON文件的形式输入。剩余的其他参数,例如KooCLI系统参数、未通过JSON文件传入的云服务API参数等,仍可在命令中传入,例如:

hcloud ECS CreateServers --cli-region="ap-southeast-1" --cli-read-timeout=60 --cli-jsonInput=C:\cli\Ecs_CreateServers.json
{
    "job_id": "ff808082******************ae0646",
    "serverIds": [
        "dd86****-****-****-****-****91527651"
    ]
}

通过“--cli-jsonInput”选项传入API参数时,首先需要编写一个JSON文件,在该文件中,各API参数需要根据其在request中的位置信息被放在对应的Key下。

构造JSON文件的步骤为:

  1. 在原命令末尾加“--help”,从结果中的“Params”中查看目标API各参数的位置信息。
  2. 创建JSON文件,建议其名称为“${服务名}_${API名}.json”,其原始内容如下:

    {
        "header": {},
        "path": {},
        "query": {},
        "formData": {},
        "cookie": {},
        "body": {}
    }

  3. 根据原始JSON文件中的Key的顺序填充其对应位置的参数:

    • 对于非body位置的参数,请在原始JSON文件对应Key的大括号中,以"参数名称":"参数值"的格式成对填入各参数及其值,同一大括号中每对数据之间以","隔开,最后一对数据与“}”之间不需要再加",";
    • 对于body位置的参数,在API Explorer页面填写其“Body”中各参数的值,填写完成后单击“切换为文本输入”,如下图所示,复制文本框中转为JSON格式的参数内容,将其粘贴在原始JSON文件的“body”Key之后,覆盖原“body”Key后对应的大括号
    图1 获取用于cli-jsonInput文件的body位置参数

  4. 各位置的参数填写完成后,若某个位置Key上没有参数,需在JSON文件中删除该位置的Key所在的行的内容。注意:需同时删除最外层“}”与其前一个“}”之间的“,”;
  5. 在原KooCLI命令中用“--cli-jsonInput=${JSON文件所在路径}”代替原命令中传入的API参数,重新调用。

使用“--cli-jsonInput”选项时,请留意这些注意事项

如在上面的示例中,“--cli-jsonInput=C:\cli\Ecs_CreateServers.json”传入的Ecs_CreateServers.json文件的内容如下:

{
    "path": {
        "project_id": "0dd8cb41******************a84546"
    },
    "body": {
        "server": {
            "adminPass": "wh***********",
            "auto_terminate_time": "2022-01-19T03:30:52Z",
            "availability_zone": "ap-southeast-1a",
            "data_volumes": [
                {
                    "multiattach": true,
                    "shareable": true,
                    "size": 100,
                    "volumetype": "SATA"
                }
            ],
            "flavorRef": "2d53****-****-****-****-****257bf163",
            "imageRef": "7059****-****-****-****-****0b5e9e4c",
            "name": "ecs_server_01",
            "nics": [
                {
                    "ipv6_enable": true,
                    "subnet_id": "4eb2****-****-****-****-****ff9a042d"
                }
            ],
            "publicip": {
                "eip": {
                    "bandwidth": {
                        "sharetype": "PER",
                        "size": 30
                    },
                    "iptype": "5_sbgp"
                }
            },
            "root_volume": {
                "volumetype": "SATA"
            },
            "server_tags": [
                {
                    "key": "date",
                    "value": "211102"
                }
            ],
            "vpcid": "5aa5****-****-****-****-****1df05a3a"
        }
    }
}