## 节点分组 (`node-groups`)

把线路编成组并对应一个接入名;可设置备用阈值,可用线路不足时自动切到备用组。

鉴权: 仅管理员 · 文档: https://www-demo.kuxitong.com/zh/docs/api/node-groups

### GET `/api/v2/node-groups`

列出节点分组 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `sort` | string |  | 排序字段,逗号分隔,前缀 `-` 表示降序,如 `-created_at,id`。 |
| `ids` | string |  | 只列这些 id:逗号分隔的正整数,去重后至多 200 个(同 page_size 上限,超了 400);空串等同不传。与其他条件取交集;看不到的 id 不返回也不报错。分页照旧,一次取回要把 page_size 设成不少于 id 个数。 |

```sh
curl "https://panel.example.com/api/v2/node-groups" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/node-groups`

创建节点分组 · 鉴权: 仅管理员

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `backup_interval_s` | integer |  | interval 方式的轮换间隔(秒)。 |
| `backup_ip_num` | integer |  | interval 方式每轮在用的备用 IP 数。 |
| `backup_min_online` | integer |  | 组内可用线路少于它就把引用本组的接入名自动切到各自的备用组;0 = 不自动切,缺省 1(可用为 0 即切)。 |
| `backup_switch_order` | BackupSwitchOrder |  | interval 方式的轮换顺序:seq 按最久未用的顺序;rand 随机。 可选值: ["seq","rand"] |
| `backup_switch_type` | BackupSwitchType |  | 备用 IP 切换方式。master_down = 同一解析线路主 IP 不可用几个就启用几个备用;gt_online_ip = 在线主 IP 数少于备用 IP 数时补齐备用(不超过不可用主 IP 数);interval = 组内全是备用 IP,按间隔轮换(切到 interval 前组内不能有主 IP)。 可选值: ["master_down","gt_online_ip","interval"] |
| `cname_hostname` | string |  | 接入名的主机记录部分(如 www),小写字母/数字/连字符、点分多段;各分组不能重复(409 cname_hostname_taken);新增留空随机生成 8 位,编辑留空保持原值。 |
| `des` | string |  | 备注说明 |
| `name` | string | 有 | 名称 |
| `region_id` | integer |  | 区域 ID |

```sh
curl -X POST "https://panel.example.com/api/v2/node-groups" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/node-groups/{id}`

获取节点分组 · 鉴权: 仅管理员

```sh
curl "https://panel.example.com/api/v2/node-groups/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/node-groups/{id}`

修改节点分组 · 鉴权: 仅管理员

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `backup_interval_s` | integer |  | interval 方式的轮换间隔(秒)。 |
| `backup_ip_num` | integer |  | interval 方式每轮在用的备用 IP 数。 |
| `backup_min_online` | integer |  | 组内可用线路少于它就把引用本组的接入名自动切到各自的备用组;0 = 不自动切,缺省 1(可用为 0 即切)。 |
| `backup_switch_order` | BackupSwitchOrder |  | interval 方式的轮换顺序:seq 按最久未用的顺序;rand 随机。 可选值: ["seq","rand"] |
| `backup_switch_type` | BackupSwitchType |  | 备用 IP 切换方式。master_down = 同一解析线路主 IP 不可用几个就启用几个备用;gt_online_ip = 在线主 IP 数少于备用 IP 数时补齐备用(不超过不可用主 IP 数);interval = 组内全是备用 IP,按间隔轮换(切到 interval 前组内不能有主 IP)。 可选值: ["master_down","gt_online_ip","interval"] |
| `cname_hostname` | string |  | 接入名的主机记录部分(如 www),小写字母/数字/连字符、点分多段;各分组不能重复(409 cname_hostname_taken);新增留空随机生成 8 位,编辑留空保持原值。 |
| `des` | string |  | 备注说明 |
| `name` | string |  | 名称 |
| `region_id` | integer |  | 区域 ID |

```sh
curl -X PUT "https://panel.example.com/api/v2/node-groups/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"backup_min_online":2}'
```

### DELETE `/api/v2/node-groups/{id}`

删除节点分组 · 鉴权: 仅管理员

```sh
curl -X DELETE "https://panel.example.com/api/v2/node-groups/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

节点分组对象:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `backup_active` | boolean |  | 已被监控自动切到备用组(可用线路回到阈值后自动切回)。 (只读) |
| `backup_interval_s` | integer |  | interval 方式的轮换间隔(秒)。 |
| `backup_ip_num` | integer |  | interval 方式每轮在用的备用 IP 数。 |
| `backup_min_online` | integer |  | 组内可用线路少于它就把引用本组的接入名自动切到各自的备用组;0 = 不自动切,缺省 1(可用为 0 即切)。 |
| `backup_switch_order` | BackupSwitchOrder |  | interval 方式的轮换顺序:seq 按最久未用的顺序;rand 随机。 可选值: ["seq","rand"] |
| `backup_switch_type` | BackupSwitchType |  | 备用 IP 切换方式。master_down = 同一解析线路主 IP 不可用几个就启用几个备用;gt_online_ip = 在线主 IP 数少于备用 IP 数时补齐备用(不超过不可用主 IP 数);interval = 组内全是备用 IP,按间隔轮换(切到 interval 前组内不能有主 IP)。 可选值: ["master_down","gt_online_ip","interval"] |
| `backup_switched` | string |  | 最近一次自动切换/切回的时刻。 (只读) |
| `cname_domains` | string[] |  | 指向本组的接入名(主机记录.根域),按字母序;没有被引用为空数组。 (只读) |
| `cname_hostname` | string |  | 接入名的主机记录部分(如 www),小写字母/数字/连字符、点分多段;各分组不能重复(409 cname_hostname_taken);新增留空随机生成 8 位,编辑留空保持原值。 |
| `created_at` | string |  | 创建时间 (只读) |
| `des` | string |  | 备注说明 |
| `id` | integer |  | 记录 ID (只读) |
| `name` | string |  | 名称 |
| `node_count` | integer |  | 组里线路引用的不同节点 IP 数。 (只读) |
| `region_id` | integer |  | 区域 ID |
| `site_count` | integer |  | 接入名指向本组的网站数。 (只读) |
| `stream_count` | integer |  | 接入名指向本组的四层转发数。 (只读) |
| `updated_at` | string |  | 更新时间 (只读) |
