如何通过Apigee API获取Apigee X的API代理及共享流策略
Apigee X 获取代理/共享流关联策略的可行方案
Apigee X 已移除旧版Edge中单独查询策略的policies类接口,所有策略配置均随API代理、共享流的版本包统一存储,通过拉取版本配置包解析即可拿到全量策略及完整内容,具体操作逻辑如下:
- 拉取对应资源的版本配置包
调用管理API拉取指定版本的压缩包,鉴权方式和你现有Python 3.7脚本用的OAuth2 Bearer Token逻辑完全一致,无需额外适配:- 拉取API代理版本包:
GET https://apigee.googleapis.com/v1/organizations/{org名称}/apis/{代理名称}/revisions/{版本号}?format=bundle - 拉取共享流版本包:
GET https://apigee.googleapis.com/v1/organizations/{org名称}/sharedflows/{共享流名称}/revisions/{版本号}?format=bundle
接口返回为zip格式的配置压缩包,无需落盘,可直接在内存中处理。
- 拉取API代理版本包:
- 解析压缩包提取策略内容
压缩包内路径固定,无需额外解析配置索引:- API代理的所有策略文件存放在
apiproxy/policies/目录下 - 共享流的所有策略文件存放在
sharedflowbundle/policies/目录下
每个策略对应一个独立XML文件,文件名为{策略名}.xml,文件内的XML文本就是策略的完整配置内容,包含策略类型、执行规则、参数配置等全部信息。
- API代理的所有策略文件存放在
- Python 3.7 适配的实现参考
用常用的requests库拉取包,标准库zipfile+io做内存解压即可,无需额外依赖:
import requests import zipfile import io # 替换为实际配置值 ORG = "你的Apigee X组织ID" TARGET_API = "目标API代理名称" TARGET_REV = "目标代理版本号" TOKEN = "你的Apigee管理接口鉴权Token" # 拉取版本包 api_resp = requests.get( url=f"https://apigee.googleapis.com/v1/organizations/{ORG}/apis/{TARGET_API}/revisions/{TARGET_REV}", headers={"Authorization": f"Bearer {TOKEN}"}, params={"format": "bundle"} ) api_resp.raise_for_status() # 提取所有策略 all_policies = [] with zipfile.ZipFile(io.BytesIO(api_resp.content)) as bundle: for f in bundle.infolist(): # 匹配策略目录下的xml文件 if f.filename.startswith("apiproxy/policies/") and f.filename.endswith(".xml"): policy_name = f.filename.split("/")[-1].rstrip(".xml") policy_content = bundle.read(f).decode("utf-8") all_policies.append({ "name": policy_name, "content": policy_content })
批量查询场景下,先调用资源列表接口拿到全量代理/共享流名称、对应全量版本号,循环执行上述逻辑即可,注意控制请求频率避免触发Apigee管理API的限流规则。如果需要结构化解析策略内容,直接用Python标准库的XML解析模块读取对应XML文本即可,查询共享流时仅需替换请求路径和压缩包内的策略匹配前缀即可。
内容的提问来源于stack exchange,提问作者Jorge Lopez Marcos
相关产品推荐
相关产品推荐

