API 调用结构

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

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

Google Ads API 是一种具有 REST 绑定的 gRPC API。这意味着可以通过两种方式调用 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。

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

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

请求标头

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

授权

您必须包含一个 OAuth 2.0 访问令牌(格式为 Authorization: Bearer YOUR_ACCESS_TOKEN),用于标识代表客户账号行事的经理账号,或直接管理自己账号的广告客户。如需了解如何检索访问令牌,请参阅 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/v25/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 请求时,请提供此值。