API 调用结构

本指南介绍了所有 API 调用的通用结构。

如果您使用客户端库与 API 进行交互,则无需了解底层请求详细信息。不过,在测试和调试时,了解一些有关 API 调用结构的知识会很有帮助。

Google Ads API 是一个 gRPC API,具有 REST 绑定。这意味着有两种方式可以调用该 API。

首选:

  1. 以协议缓冲区的形式创建请求正文。
  2. 使用 HTTP/2 将其发送到服务器。
  3. 将响应反序列化为协议缓冲区。
  4. 深度解读分析结果。

我们的大多数文档都介绍了如何使用 gRPC。

可选:

  1. 以 JSON 对象的形式创建请求正文。
  2. 使用 HTTP 1.1 将其发送到服务器。
  3. 将响应反序列化为 JSON 对象。
  4. 深度解读分析结果。

如需详细了解如何使用 REST,请参阅 REST 接口指南。

资源标识符

Google Ads API 中的对象使用结构化资源名称和复合标识符进行寻址。

资源名称

API 中的大多数对象都通过其资源名称字符串进行标识。使用 REST 接口时,这些字符串也可用作网址。如需了解其结构,请参阅 REST 接口资源名称。

复合 ID

如果对象的 ID 不是全局唯一的,则通过在对象 ID 前面加上其父级 ID 和波浪号 (~) 来构造该对象的复合 ID。

例如,AdGroupAd 的资源名称格式为 customers/{customer_id}/adGroupAds/{ad_group_id}~{ad_id}。由于其复合标识符结合了父级广告组 ID (ad_group.id) 和底层广告 ID (ad_group_ad.ad.id),因此我们将广告组 ID 附加到广告 ID 的前面:

  • AdGroupId(123 的广告组 ID)+ ~ + AdId(45678 的广告组 ID)= 复合广告组广告 ID(123~45678 的广告组 ID)。

请求标头

以下是请求中随正文一起发送的 HTTP 标头(或 gRPC 元数据):

授权

您必须以 Authorization: Bearer YOUR_ACCESS_TOKEN 的形式添加 OAuth 2.0 访问令牌,用于标识代表客户执行操作的经理账号,或直接管理自己账号的广告客户。如需了解如何检索访问令牌,请参阅 OAuth2 指南。访问令牌在获取后一小时内有效;到期后,请刷新访问令牌以检索新令牌。请注意,我们的客户端库会自动刷新过期的令牌。

如果您遇到授权错误,请确保您使用的是正确的凭据,并且拥有足够的权限。USER_PERMISSION_DENIED 错误表示经过身份验证的用户可能无权访问请求中指定的客户账号。如果您的 Google Cloud 项目仅获准访问 Test,而您向生产账号发送请求,则 API 会在 v25 及更高版本中返回 AuthorizationError.CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION(或在 v24 及更早版本中返回 AuthorizationError.ACTION_NOT_PERMITTED)。如需详细了解如何管理权限,请参阅 Google Ads 访问权限级别。

login-customer-id

这是要在请求中使用的授权客户的客户 ID,不带连字符 (-)。如果您是通过经理账号访问客户账号,则此标头是必需的,并且必须设置为经理账号的客户 ID。如果您在通过经理账号进行身份验证时未能添加 login-customer-id,则会导致 AuthorizationError.USER_PERMISSION_DENIED 错误。如需详细了解此类错误,请参阅常见错误。如需详细了解如何解析账号访问权限,请参阅 OAuth 访问模型指南。

https://googleads.googleapis.com/v26/customers/1234567890/campaignBudgets:mutate

设置 login-customer-id 相当于在登录后在 Google Ads 界面中选择账号,或点击右上角的个人资料图片。如果您不添加此标头,则默认值为操作客户。

linked-customer-id

此标头是必需的,供合作伙伴(例如第三方应用分析工具提供商或数据合作伙伴)在对关联的 Google Ads 账号执行操作时使用。此标头必须指定具有产品链接的 Google Ads 账号的客户 ID。

假设有这样一个场景:合作伙伴需要根据产品关联向 Google Ads 账号发出 API 调用。

  • 广告客户:通过 API 调用进行管理或更新的 Google Ads 账号。 广告客户账号的 ID 在请求中指定。在 REST 中,这是 customerId 路径参数(例如 customers/1111111111/...),在 gRPC 中,这是请求中的 customer_id 字段。
  • 合作伙伴:合作伙伴账号(例如,第三方应用分析工具提供商或数据合作伙伴)。
  • 关联的账号:与合作伙伴建立了产品关联的 Google Ads 账号,该关联会向合作伙伴授予对广告客户的访问权限。

有权访问合作伙伴账号的用户会发出 API 调用,以对广告客户账号中的实体执行操作(例如,上传转化数据或管理用户名单)。关联的账号可以是广告客户账号本身,也可以是广告客户账号的经理账号。

请求标头必须设置如下:

  • Authorization:有权访问合作伙伴的用户的 OAuth 2.0 访问令牌。
  • login-customer-id:合作伙伴账号的客户 ID。经过身份验证的用户必须有权访问此账号。
  • linked-customer-id:关联账号的客户 ID。此标头表示此请求的授权依赖于关联账号与合作伙伴的产品关联。

关联场景分为以下两种:

  • 如果广告客户账号与合作伙伴账号有直接的产品关联,则关联的账号为广告客户,并且 linked-customer-id 必须设置为广告客户账号的客户 ID。
  • 如果广告客户账号由与合作伙伴账号建立了产品关联的经理账号管理,则关联的账号就是该经理账号,并且 linked-customer-id 必须设置为该经理账号的客户 ID。

示例 1:直接链接

如果广告客户账号 1111111111 与合作伙伴账号 2222222222 直接关联,并且 API 调用以 customers/1111111111/... 为目标,则:

Authorization: Bearer YOUR_ACCESS_TOKEN
login-customer-id: 2222222222
linked-customer-id: 1111111111

示例 2:经理账号关联

如果广告客户账号 1111111111 由经理账号 3333333333 管理,经理账号 3333333333 与合作伙伴账号 2222222222 关联,并且 API 调用以 customers/1111111111/... 为目标:

Authorization: Bearer YOUR_ACCESS_TOKEN
login-customer-id: 2222222222
linked-customer-id: 3333333333

响应标头

以下标头(或 gRPC 尾随元数据)会随响应正文一起返回。我们建议您记录这些值,以便进行调试。

request-id

request-id 是一个字符串,用于唯一标识此请求。在与支持团队联系时,请提供此值,以帮助排查失败或意外的 API 请求。