如何提取REST API返回JSON中的app_id并执行对应DELETE操作
批量清理应用配置操作方案
以下两种方案均可以实现「拉取全量配置-提取应用ID-批量删除」的全流程,根据自己的运行环境选择即可。
方案1:cURL + jq 命令行实现(适合Linux/macOS/WSL环境)
这个方案是命令行环境下最简便的实现,依赖JSON处理工具jq,先安装对应环境的jq:
- Debian/Ubuntu系:
sudo apt install jq - CentOS/RHEL系:
sudo yum install jq - macOS(Homebrew):
brew install jq
安装完成后,替换命令里的API_TOKEN为你自己的真实接口令牌,直接执行即可:
# 配置基础参数 API_TOKEN="替换为你的真实Api-Token" API_ADDR="https://website.com/api/v2/data/apps/conf" # 拉取全量配置、提取app_id、循环执行删除 curl -s -X GET "$API_ADDR" \ -H "accept: application/json" \ -H "Api-Token: $API_TOKEN" \ | jq -r '.data.conf[].app_id' \ | while read -r app_id; do echo "开始删除app_id=${app_id}的配置" curl -s -X DELETE "${API_ADDR}/${app_id}" \ -H "accept: application/json" \ -H "Api-Token: $API_TOKEN" echo -e "\n" done
执行前可以先单独运行GET请求+jq提取的部分(即curl到jq那两行),先打印出所有待删除的app_id列表,核对无误后再执行后续删除逻辑,避免误删。
方案2:Python脚本实现(全平台通用,无额外依赖)
如果是Windows环境,或者不想额外装jq,可以用Python标准库写脚本实现,不需要安装第三方依赖,只要本地有Python3环境就能跑:
- 新建文件
clean_app.py,写入以下内容,替换开头的API_TOKEN为真实令牌:
import json import time import urllib.request import urllib.error API_TOKEN = "替换为你的真实Api-Token" API_ADDR = "https://website.com/api/v2/data/apps/conf" # 拉取全量应用配置 get_req = urllib.request.Request( API_ADDR, headers={ "accept": "application/json", "Api-Token": API_TOKEN } ) with urllib.request.urlopen(get_req) as resp: conf_list = json.loads(resp.read().decode()) # 提取所有待删除的app_id app_ids = [item["app_id"] for item in conf_list["data"]["conf"]] print(f"待删除应用ID列表:{app_ids},共{len(app_ids)}条配置") # 逐个执行删除 for aid in app_ids: print(f"正在删除app_id={aid}...") del_req = urllib.request.Request( f"{API_ADDR}/{aid}", method="DELETE", headers={ "accept": "application/json", "Api-Token": API_TOKEN } ) try: with urllib.request.urlopen(del_req) as del_resp: print(f"app_id={aid} 删除成功,状态码:{del_resp.status}") except urllib.error.HTTPError as e: print(f"app_id={aid} 删除失败,状态码:{e.code},错误:{e.read().decode()}") # 如果接口有请求频率限制,把下面这行注释打开,每次请求间隔1秒 # time.sleep(1)
- 打开终端进入文件所在目录,执行
python clean_app.py即可运行。
注意事项
- 必须在执行删除操作前,先单独调用GET接口把全量配置做本地备份,删除操作不可逆,避免配置丢失无法恢复
- 如果接口配置了请求频率限制,按照脚本/命令里的提示加请求间隔即可,避免触发限流被拦截
- 生产环境操作建议先在测试环境验证脚本逻辑,确认删除范围符合预期后再执行
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

