Ad Manager SOAP API 是一种旧版 API,用于读取和写入 Ad Manager 数据以及运行报告。如果您可以迁移,我们建议您使用 Ad Manager API(Beta 版)。不过,Ad Manager SOAP API 版本在其典型生命周期内均受支持。如需了解详情,请参阅 Ad Manager SOAP API 弃用时间表。
以下指南概述了 Ad Manager SOAP API 与 Ad Manager API(Beta 版)之间的区别。
学习
标准 Ad Manager SOAP API 服务方法在 Ad Manager API 中有等效的概念。Ad Manager API 还提供用于读取单个实体的方法。此外,在 SOAP API 中使用单个 perform<Entity>Action 方法的状态更改操作现在在 REST API 中针对每种操作类型都有专用方法。
下表显示了 Order 方法的映射示例:
| SOAP 方法 | REST 方法 |
|---|---|
createOrders |
networks.orders.batchCreate |
getOrdersByStatement |
networks.orders.getnetworks.orders.list |
updateOrders |
networks.orders.batchUpdate |
performOrderAction |
每种操作类型对应一种方法。 例如: networks.orders.batchApprovenetworks.orders.batchPausenetworks.orders.batchResume |
状态更改操作响应
在 SOAP API 中,perform<Entity>Action 返回了一个 UpdateResult 对象,其中包含一个 numChanges 字段,用于指明修改了多少个实体。在 Ad Manager API(Beta 版)中,批量操作方法会返回一个空响应对象。检查是否成功执行(HTTP 200 OK 状态或客户端库中没有异常),以确定操作是否成功。
重命名和拆分的服务
Ad Manager API 中已重命名或拆分部分服务:
| SOAP 服务 | REST 资源 / 服务 |
|---|---|
InventoryService |
networks.adUnits |
MobileApplicationService |
networks.applications |
CustomTargetingService |
networks.customTargetingKeysnetworks.customTargetingValues |
身份验证
如需使用 Ad Manager API(Beta 版)进行身份验证,您可以使用现有的 Ad Manager SOAP API 凭据,也可以创建新的凭据。无论选择哪种方式,您都必须先在 Google Cloud 项目中启用 Ad Manager API。如需了解详情,请参阅身份验证。
如果您使用的是客户端库,请通过将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为服务账号密钥文件的路径来设置应用默认凭据。如需了解详情,请参阅应用默认凭证的工作原理。
如果您使用的是已安装的应用凭据,请创建以下格式的 JSON 文件,并将环境变量设置为该文件的路径:
{
"client_id": "CLIENT_ID",
"client_secret": "CLIENT_SECRET",
"refresh_token": "REFRESH_TOKEN",
"type": "authorized_user"
}
替换以下值:
CLIENT_ID:您的新客户端 ID 或现有客户端 ID。CLIENT_SECRET:您的新客户端密钥或现有客户端密钥。REFRESH_TOKEN:您的新刷新令牌或现有刷新令牌。
Linux 或 macOS
export GOOGLE_APPLICATION_CREDENTIALS=KEY_FILE_PATHWindows
set GOOGLE_APPLICATION_CREDENTIALS=KEY_FILE_PATH
了解资源名称
在 Ad Manager SOAP API 中,实体由数字 Long ID 标识。
SOAP 中的实体关系也会引用这些数字 ID。
在 Ad Manager API 中,实体由标准资源名称(格式为字符串)标识:
networks/{networkCode}/{collection}/{id}
例如,如果某个订单在广告资源网 123 中的 ID 为 123456,则其资源名称为 networks/123/orders/123456。
迁移代码时:
- 单实体方法和批处理操作方法采用资源名称字符串,而不是数字 ID。
- 实体关系和外键引用使用资源名称。例如,
Order.advertiser是networks/123/companies/456而不是Order.advertiserId。 - 与 SOAP 相比,底层 ID 空间保持不变。您可以从资源名称的最后一部分提取数字 ID。
了解更新掩码
在 Ad Manager SOAP API 中,更新方法接受完整的实体对象并更新所有修改后的字段。
在 Ad Manager API 中,更新操作使用更新掩码。更新掩码用于控制在更新期间修改哪些字段:
- 只有
updateMask中列出的字段会被修改。掩码中省略的字段保持不变。 - 如果您未指定
updateMask,则请求中存在的所有字段都会更新。
如需了解详情,请参阅字段掩码。
了解过滤条件差异
Ad Manager API(Beta 版)查询语言支持所有发布商查询语言 (PQL) 功能,但语法存在显著差异。
以下列出 Order 个对象的示例展示了主要变化,例如移除了绑定变量、区分大小写的运算符,以及将 ORDER BY 和 LIMIT 子句替换为单独的字段:
Ad Manager SOAP API
<filterStatement>
<query>WHERE name like "PG_%" and lastModifiedDateTime >= :lastModifiedDateTime ORDER BY id ASC LIMIT 500</query>
<values>
<key>lastModifiedDateTime</key>
<value xmlns:ns2="https://www.google.com/apis/ads/publisher/v202502" xsi:type="ns2:DateTimeValue">
<value>
<date>
<year>2024</year>
<month>1</month>
<day>1</day>
</date>
<hour>0</hour>
<minute>0</minute>
<second>0</second>
<timeZoneId>America/New_York</timeZoneId>
</value>
</value>
</values>
</filterStatement>
Ad Manager API(Beta 版)
JSON 格式
{
"filter": "displayName = \"PG_*\" AND updateTime > \"2024-01-01T00:00:00-5:00\"",
"pageSize": 500,
"orderBy": "name"
}
网址编码
GET https://admanager.googleapis.com/v1/networks/123/orders?filter=displayName+%3D+\"PG_*\"+AND+updateTime+%3E+\"2024-01-01T00%3A00%3A00-5%3A00\"
Ad Manager API(Beta 版)支持所有 PQL 功能,但与 Ad Manager SOAP API 相比,在语法上存在以下差异:
在 Ad Manager API(Beta 版)中,运算符
AND和OR区分大小写。小写的and和or会被视为裸字面搜索字符串,这是 Ad Manager API(Beta 版)中的一项功能,用于在各个字段中进行搜索。使用大写运算符
// Matches unarchived Orders where order.notes has the value 'lorem ipsum'. notes = "lorem ipsum" AND archived = false将小写字母视为字面值
// Matches unarchived Orders where order.notes has the value 'lorem ipsum' // and any field in the order has the literal value 'and'. notes = "lorem ipsum" and archived = false字符
*是用于字符串匹配的通配符。Ad Manager API(Beta 版)不支持like运算符。Ad Manager SOAP API PQL
// Matches orders where displayName starts with the string 'PG_' displayName like "PG_%"Ad Manager API(Beta 版)
// Matches orders where displayName starts with the string 'PG_' displayName = "PG_*"字段名称必须显示在比较运算符的左侧:
有效过滤条件
updateTime > "2024-01-01T00:00:00Z"过滤条件无效
"2024-01-01T00:00:00Z" < updateTimeAd Manager API(Beta 版)不支持绑定变量。所有值都必须内嵌。
包含空格的字符串字面量必须用英文双引号括起来,例如
"Foo bar"。您不能使用单引号来封装字符串字面量。
了解字段命名惯例
Ad Manager API 中的字段名称遵循标准化的 REST 和 Google Cloud 惯例,这与 SOAP 不同:
- 显示名称:SOAP
name字段在 Ad Manager API 中重命名为displayName。例如,Order.name现在写作Order.displayName,AdUnit.name现在写作AdUnit.displayName。 - 时间戳:SOAP
DateTime字段(例如lastModifiedDateTime和startDateTime)替换为 RFC 3339 时间戳字符串。updateTime和startTime。 - 布尔值:布尔值字段会舍弃
is等前缀。例如,isArchived现为archived。
移除 order by 子句
在 Ad Manager API(Beta 版)中,指定排序顺序是可选的。如果您想为结果集指定排序顺序,请移除 PQL ORDER BY 子句,并改为设置 orderBy 字段:
GET networks/${NETWORK_CODE}/orders?orderBy=updateTime+desc
从偏移量迁移到分页令牌
Ad Manager API(Beta 版)使用分页令牌,而不是 LIMIT 和 OFFSET 子句,以便对大型结果集进行分页。
Ad Manager API(Beta 版)使用 pageSize 参数来控制页面大小。与 Ad Manager SOAP API 中的 LIMIT 子句不同,省略页面大小不会返回整个结果集。不过,列表方法会使用默认的页面大小 50。以下示例将 pageSize 和 pageToken 设置为网址参数:
# Initial request
GET networks/${NETWORK_CODE}/orders?pageSize=50
# Next page
GET networks/${NETWORK_CODE}/orders?pageSize=50&pageToken=${TOKEN_FROM_INITIAL_REQUEST}
与 Ad Manager SOAP API 不同,即使有其他页面,Ad Manager API(Beta 版)返回的结果数也可能少于所请求的页面大小。使用 nextPageToken 字段确定是否有更多结果。
虽然分页不需要偏移量,但您可以将 skip 字段用于多线程处理。进行多线程处理时,请使用第一页的分页令牌,以确保您读取的是同一组结果:
# First thread
GET networks/${NETWORK_CODE}/orders?pageSize=50&pageToken=${TOKEN_FROM_INITIAL_REQUEST}
# Second thread
GET networks/${NETWORK_CODE}/orders?pageSize=50&pageToken=${TOKEN_FROM_INITIAL_REQUEST}&skip=50
迁移报告
SOAP API 只能读取和运行已弃用的“报告”工具中的报告。 相反,REST API 只能读取、写入和运行互动式报告。
报告工具和 API 具有不同的 ID 空间。SOAP API 中 SavedQuery 的 ID 无法在 REST API 中使用。
如果您使用的是 SavedQuery,则可以在界面中将报告迁移到互动式报告,并在两个 ID 空间之间创建映射。如需详细了解如何在界面中迁移报告,请参阅将报告迁移到互动式报告。
如需查看 SOAP 到 REST 枚举值的完整映射,请参阅报告参考文档。
了解 API 差异
SOAP API 和 REST API 在处理报告定义和结果方面存在一些差异:
如果报告仅请求
NAME,SOAP API 会自动向结果添加相应的ID维度。在 REST API 中,您必须明确将ID维度添加到ReportDefinition,才能将其纳入结果中。SOAP API 没有明确的指标类型。REST API 定义了一种数据类型,该数据类型在
Metric和Dimension枚举值中进行了说明。请注意,ENUM维度是开放式枚举。在解析结果时,您必须处理新的和未知的枚举值。SOAP API 将
Dimensions和DimensionAttributes分开。REST API 具有包含这两者的统一Dimension枚举。SOAP API 对维度数量没有限制。互动式报告在界面和 API 中最多可包含 10 个维度。按同一 ID 空间细分的维度计为单个维度。例如,包括
ORDER_NAME、ORDER_ID和ORDER_START_DATE在计算限制时仅计为 1 个维度。
处理错误
在 SOAP API 中,错误以 SOAP 故障的形式返回,并使用 ApiException 和特定于服务的理由代码进行处理。
Ad Manager API 使用标准 Google Cloud RPC 和 HTTP 错误模型:
- 错误会返回标准 HTTP 状态代码,例如
400 INVALID_ARGUMENT、404 NOT_FOUND或403 PERMISSION_DENIED。 - 详细的 API 错误(例如字段违规原因)会在错误载荷的错误详细信息中返回。