# 使用API调用观测接口
此类接口与单/多智能体、工作流的调用方式有所差异。认证鉴权信息中的Authorization、X-Sdk-Date的值需要通过一个API签名SDK获取。
这类接口的域名地址为：agentarts.cn-southwest-2.myhuaweicloud.com
接口Header由三个参数构成：Authorization、X-Sdk-Date、Content-Type，其中Content-Type的固定值为application/json。
**本案例以Python调用"查询Trace列表"接口（POST /v1/ops/observation/traces）为例进行讲解。** **该接口用于在观测页面查询Trace数据列表。**
#### 前置检查
- 已开通AgentArts服务。
- IAM用户需具备对应授权项：agentarts::listOpsTrace，同时依赖apm:apm2TraceEvents:get、apm:apm2Service:get权限；账号根用户默认拥有调用权限。
 
#### 步骤一：了解接口参数
获取Trace列表接口请求URI如下：
POST /v1/ops/observation/traces
拼接域名地址后，完整的调用接口为：https://agentarts.cn-southwest-2.myhuaweicloud.com/v1/ops/observation/traces
本接口的必填参数只有Header的Authorization、X-Sdk-Date、Content-Type，其中Authorization、X-Sdk-Date参数取值方法请参见后续步骤，Content-Type的固定值为application/json。参数含义如下：
表1请求Header参数 
| 参数            | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| Content-Type  | 是    | String | **参数解释：** 消息体编码格式。用于告知服务端请求体（Body）所采用的主体数据类型，以便服务端正确解析。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** application/json。 |
| Authorization | 是    | String | **参数解释：** 签名认证信息，当使用AK/SK方式认证时，使用SDK对请求进行签名的过程中会自动填充该字段。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。             |
| X-Sdk-Date    | 是    | String | **参数解释：** 请求发送的时间，当使用AK/SK方式认证时，使用SDK对请求进行签名的过程中会自动填充该字段。 **约束限制：** 不涉及。 **取值范围：** 不涉及。 **默认取值：** 不涉及。            |
   
**请求Body参数说明**
请求Body为JSON格式，全部参数均为非必选，支持时间范围、资源、trace_id、会话、标签、分页等多维度条件过滤。
虽然Body参数均为非必填，但在实际接口调用时，建议填写以下参数以确保获取到有效数据。尤其是start_time和end_time参数，如果不填写，接口可能返回空数据。填写这两个时间参数时，需确保所选时间范围内已有实际的调用数据产生，接口才会返回对应的Trace数据。
**建议填写的参数如下：**
- page_no、page_size：分页控制参数，建议填写以管理返回数据量。
- start_time、end_time：毫秒级Unix时间戳，限定Trace查询时间区间。如不填写，接口可能不返回数据；填写时需确保时间范围内存在调用数据。
- span_type：用于过滤哪些节点上报的数据。
完整参数字段、结构体、约束、取值范围，请参见API参考文档[查询trace列表‑ListOpsTrace](https://support.huaweicloud.com/api-agentarts/ListOpsTrace.html)的请求参数章节。
#### 步骤二：构造接口调用脚本
**安装运行环境：**
- 安装Python：如果您尚未安装，去[python.org](https://www.python.org/)下载并安装（记得安装时勾选 "Add Python to PATH"）。
- 安装requests库： 打开电脑的"命令提示符"（Windows按Win+R键输入cmd），输入以下命令并按回车：
  ```
  pip install requests
  ```
  
**获取API签名所需的SDK包：**
1. 在[签名指南](https://support.huaweicloud.com/devg-apisign/api-sign-sdk-python.html)文档中下载Python SDK，并在本地解压。签名指南文档中的其他内容本案例中可不用关注。
   
   图1获取SDK   
   ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002741929817.png "点击放大")
   解压后的文件目录结构如下：
   ```
   ApiGateway-python-sdk/              ← 根目录（解压出来的文件夹）
   │
   ├── apig_sdk/                       ← 【核心签名库，不要动！】
   │   ├── __init__.py                 ← 包的入口标识文件
   │   └── signer.py                   ← 签名核心代码（所有签名逻辑都在这里）
   │
   ├── main.py                         ← 【您要改的文件】调用示例
   │
   └── licenses/                       ← 开源许可证文件夹（不用管）
       └── license-requests            ← requests库的许可证说明
   ```
   图2目录结构   
   ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002742049769.png "点击放大")
   
   
**构造接口调用脚本**
1. 获取AK、SK，并添加至本地电脑的环境变量中。 
   1. 登录控制台"[我的凭证 \> 访问密钥](https://console.huaweicloud.com/iam/#/mine/accessKey)"，获取AK和SK。AK、SK最多可添加2个。
      图3获取AK、SK   
      ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002712330816.png "点击放大")
      图4AK、SK示例   
      ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002712170872.png "点击放大") 
   
   2. 通过以下命令，在Windows的命令提示符cmd中设置临时环境变量。
      ```
      set HUAWEICLOUD_SDK_AK=您的Access Key
      set HUAWEICLOUD_SDK_SK=您的Secret Key
      ```
      
   
   3. 通过以下命令检查环境变量是否生效。
      ```
      echo %HUAWEICLOUD_SDK_AK%
      echo %HUAWEICLOUD_SDK_SK%
      ```
      
   
   
   
   
2. 打开Python SDK的文件夹目录，编辑main.py脚本，添加具体的业务接口信息。 
   用记事本（或者安装了代码编辑器如VS Code）打开main.py脚本，删除原有内容，并将下方代码添加进去。
   示例中已经将**"查询Trace列表"接口**的示例填入，可以直接使用。如果更换其他接口也可以参考脚本的批注进行填写。
   ```
   # -*- coding: utf-8 -*-
   # Copyright (c) Huawei Technologies CO., Ltd. 2022-2025. All rights reserved.
   import os
   import json
   import requests
   from apig_sdk import signer
   def demo_api_call():
       # --- 1. 初始化签名对象 ---
       sig = signer.Signer()
       ak = os.getenv('HUAWEICLOUD_SDK_AK')
       sk = os.getenv('HUAWEICLOUD_SDK_SK')
       if not ak or not sk:
           print("错误：未找到环境变量 HUAWEICLOUD_SDK_AK 或 HUAWEICLOUD_SDK_SK")
           return
       sig.Key = ak.strip()
       sig.Secret = sk.strip()
       # --- 2. 构造请求参数（全部使用英文符号！！） ---
       method = "POST"
       # 重要：这里全部是英文短横线 `-`
       url = "https://agentarts.cn-southwest-2.myhuaweicloud.com/v1/ops/observation/traces"
       headers = {
           "Content-Type": "application/json"
       }
       # POST请求体示例：分页+时间范围过滤
       req_body = {
           "page_no": 1,
           "page_size": 10,
           "start_time": 1787648299491,
           "end_time": 1788857899491,
           "span_type": "root"
       }
       body = json.dumps(req_body, ensure_ascii=False)
       # --- 3. 执行签名 ---
       r = signer.HttpRequest(method, url, headers, body)
       sig.Sign(r)
       print(f"--- 鉴权信息 ---")
       print(f"X-Sdk-Date: {r.headers.get('X-Sdk-Date')}")
       print(f"Authorization: {r.headers.get('Authorization')}\n")
       # --- 4. 发起请求并处理响应 ---
       try:
           resp = requests.request(
               method=r.method,
               url=r.scheme + "://" + r.host + r.uri,
               headers=r.headers,
               data=r.body
           )
           print(f"--- 响应结果 ---")
           print(f"状态码: {resp.status_code} {resp.reason}")
           if resp.status_code == 200:
               print(json.dumps(resp.json(), indent=4, ensure_ascii=False))
           else:
               print(resp.text)
       except Exception as e:
           print(f"请求发生异常: {e}")
   if __name__ == '__main__':
       demo_api_call()
   ```
   
   
3. 脚本编辑完成后，保存并关闭该脚本。
 
#### 步骤三：运行脚本获取接口响应
1. 在Python SDK的文件夹上方显示路径的地址栏里，清空地址，直接输入cmd后按回车。 
   ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002741929819.png "点击放大")
   
   
2. 在打开的命令提示符窗口中会显示出当前的文件夹路径，输入以下命令执行脚本。 
   ```
   python main.py
   ```
   运行该脚本会返回接口的鉴权信息值，以及接口的响应结果。
   图5运行示例   
   ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002752468633.png "点击放大")
   图6控制台示例   
   ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002722949582.png "点击放大")
   没有数据时，响应示例如下：
   图7运行示例   
   ![](https://support.huaweicloud.com/api-agentarts/zh-cn_image_0000002722948712.png "点击放大")
   
   
 
