更新时间:2024-04-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文件的方法有如下两种:

方法一

使用“--skeleton”生成并填写JSON格式API入参骨架文件,并将该文件以“--cli-jsonInput=${JSON文件名}”传入。

方法二

在API Explorer页面获取API参数,并写入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=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"
            }
        }
    }

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