读取报告的数据

App Optimize API 创建报告后,您可以提取报告的费用和使用情况数据。此操作会将这些信息下载为列和行,并根据您在请求报告时指定的维度和指标进行结构化。

此 API 请求不同于获取 报告的元数据,后者仅返回报告的 配置设置。

准备工作

gcloud

在 Google Cloud 控制台中,激活 Cloud Shell。

激活 Cloud Shell

Cloud Shell 会话随即会在控制台的底部启动,并显示命令行提示符。 Google Cloud Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟来完成初始化。

如需了解如何为生产环境设置身份验证,请参阅身份验证文档中的 为在 Google Cloud 上运行的代码设置应用默认凭据。 Google Cloud

Python

  1. 安装 Python 客户端库 App Optimize API。
  2. 如需在本地开发环境中使用本页面上的 Python 示例,请安装并 初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭据。

    1. 安装 Google Cloud CLI。

    2. 如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI

    3. 如果您使用的是本地 shell,请为您的用户 账号创建本地身份验证凭证:

      gcloud auth application-default login

      如果您使用的是 Cloud Shell,则无需执行此操作。

      如果返回了身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 身份验证文档中的 为本地开发环境设置 ADC Google Cloud

    如需了解如何为生产环境设置身份验证,请参阅身份验证文档中的 为在 Google Cloud 上运行的代码设置应用默认凭据。 Google Cloud

REST

如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的 凭证。

    安装 Google Cloud CLI。

    如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI

如需了解详情,请参阅 身份验证文档 中的 Google Cloud 使用 REST 时进行身份验证。

如需了解如何为生产环境设置身份验证,请参阅身份验证文档中的 为在 Google Cloud 上运行的代码设置应用默认凭据。 Google Cloud

所需的角色

如需获得读取报告数据所需的权限,请让您的管理员向您授予拥有报告资源的项目中的 App Optimize Viewer (roles/appoptimize.viewer) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。

读取报告数据

如需读取已完成报告中的数据,请按照您首选方法的说明操作:

gcloud

使用 gcloud beta app-optimize reports read 命令提取报告的数据。

gcloud beta app-optimize reports read REPORT_ID \
  --project=PROJECT_ID \
  --location=global

替换以下内容:

  • PROJECT_ID:拥有您要读取的报告资源的 Google Cloud 项目 ID。
  • REPORT_ID:要读取的报告的 ID。此 ID 是在创建报告时指定的,可以通过 列出报告来获取。

gcloud 命令会自动处理分页,并返回所有请求的资源。

如需了解 cost 字段中的值,请参阅 解读费用指标。 如需详细了解数据并了解其限制,请参阅 了解数据

Python

以下 Python 代码使用 AppOptimizeClient.read_report() 读取报告的数据。

from google.cloud import appoptimize_v1beta

project_id = "PROJECT_ID"
report_id = "REPORT_ID"

# Create the App Optimize client and read a report's data
client = appoptimize_v1beta.AppOptimizeClient()
request = appoptimize_v1beta.ReadReportRequest(
    name=f"projects/{project_id}/locations/global/reports/{report_id}"
)
result = client.read_report(request=request)

# Display the report data
print(result)

替换以下内容:

  • PROJECT_ID:拥有您要读取的报告资源的 Google Cloud 项目 ID。
  • REPORT_ID:要读取的报告的 ID。此 ID 是在创建报告时指定的,可以通过 列出报告来获取。

客户端库会自动处理分页,并从迭代器生成结果。

如需了解 cost 字段中的值,请参阅 解读费用指标。 如需详细了解数据并了解其限制,请参阅 了解数据

REST

向 REST API 的 :read 自定义方法发送 HTTP POST 请求。

  1. 使用以下 curl 命令发送该请求 以读取报告数据的第一页:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{"pageSize": PAGE_SIZE}' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"
    

    替换以下内容:

    • PROJECT_ID:拥有您要读取的报告资源的 Google Cloud 项目 ID。
    • REPORT_ID:要读取的报告的 ID。此 ID 是在创建报告时指定的,可以通过 列出报告来获取。
    • PAGE_SIZE:每页返回的最大行数。即使您指定了更大的值,服务器每页最多也会返回 1,000 行。响应还受 10 MB 大小限制,因此可能会返回较少的行,以保持在该限制范围内。 如果省略了 pageSize,则使用默认大小。
  2. 如果请求成功,API 会返回一个 JSON 响应,其中包含报告架构和行。以下是一个成功的响应示例:

    {
      "rows": [
        [
          "//apphub.googleapis.com/projects/123456789/locations/us-central1/applications/my-app-1",
          {
            "currency_code": "USD",
            "units": "106",
            "nanos": 321590000
          }
        ],
        [
          "//apphub.googleapis.com/projects/123456789/locations/us-central1/applications/my-app-2",
          {
            "currency_code": "USD",
            "units": "797",
            "nanos": 641691000
          }
        ]
      ],
      "columns": [
        {
          "name": "application",
          "type": "STRING"
        },
        {
          "name": "cost",
          "type": "RECORD",
          "columns": [
            {
              "name": "currency_code",
              "type": "STRING"
            },
            {
              "name": "units",
              "type": "INT64"
            },
            {
              "name": "nanos",
              "type": "INT64"
            }
          ]
        }
      ],
      "nextPageToken": "AABBCCddeeffGGHHiiJJkkLL"
    }
    

    如需了解 cost 字段中的值,请参阅 解读费用指标。 如需详细了解数据并了解其限制,请参阅 了解数据

  3. 如果响应包含 nextPageToken 字段,则报告包含其他行。如需检索下一页结果,请发出另一个 POST 请求,并在 JSON 正文的 pageToken 字段中包含此令牌:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{"pageToken": "NEXT_PAGE_TOKEN", "pageSize": PAGE_SIZE}' \
      "https://appoptimize.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/reports/REPORT_ID:read"
    

    替换以下内容:

    • NEXT_PAGE_TOKEN:在上一个响应中收到的 nextPageToken 的值。
    • PAGE_SIZE:每页返回的最大行数。虽然您可以在页面请求之间更改此值,但服务器端限制仍然适用。

    重复此过程,直到响应不再包含 nextPageToken,这表示您已检索所有报告数据。

后续步骤