src/Google/Ads/GoogleAds/vX
中的源代码
Google Ads API PHP 客户端库的目录,其中 X 是 Google Ads API
使用 GAPIC(生成的 API 客户端)
生成器,基于已发布的
proto
文件。
然后,对生成的源代码进行修改,使其包含对 trait 和
创建与 Google Ads API 配合使用的服务客户端所需的类,
GoogleAdsClient
类,该类通过调用
GoogleAdsClientBuilder::build()
。GoogleAdsClient
和
GoogleAdsClientBuilder
是位于
src/Google/Ads/GoogleAds/Lib/vX/
。
GAPIC v2 源代码
从 v20.1.0 版开始,客户端库
还包含新版 GAPIC 源代码,
src/Google/Ads/GoogleAds/vX
,支持将请求对象传递给服务
客户的方法。这一新版本名为 GAPIC v2,
。早期的 GAPIC 源代码 GAPIC v1
每个版本中仍会生成并包含,直到 2023 年底为止。
通过 Google Ads API PHP 客户端库,您可以选择要链接到的版本
GoogleAdsClient
(使用配置设置)
useGapicV2Source
。当此设置设为
true
时,客户端库会生成一个 GoogleAdsClient
对象,用于创建
GAPIC v2 服务客户端。
生成的课程位置
以下是适用于 两种类:
GAPIC 生成的客户端和相关文件 | GAPIC v1
src/Google/Ads/GoogleAds/VX/Services/Gapic/ |
进行后处理的客户 | GAPIC v1
src/Google/Ads/GoogleAds/VX/Services/ src/Google/Ads/GoogleAds/VX/Services/Client/ |
用法
GAPIC v1 要求您将每个请求参数直接传递给方法,
而 GAPIC v2 要求您改为传递请求对象。请注意,在
在某些情况下,从 GAPIC 开始,您可以通过多种方式创建请求对象。
v2 还生成了一个名为 build()
的便捷方法,用于传递 required
参数。
示例 1.1:带有必需参数的方法
以下示例代码比较了在 GAPIC 中调用 CampaignService::mutate()
v1 和 v2。请注意,所有参数($customerId
和 $operations
)均为
必需形参,以便生成接受这两个形参的 build()
。
模式 1 | GAPIC v1
$campaignServiceClient = $googleAdsClient->getCampaignServiceClient(); $response = $campaignServiceClient->mutateCampaigns( $customerId, $campaignOperations ); $campaignServiceClient = $googleAdsClient->getCampaignServiceClient(); $response = $campaignServiceClient->mutateCampaigns( MutateCampaignsRequest::build( $customerId, $campaignOperations ) ); |
模式 2 | GAPIC v1
N/A $campaignServiceClient = $googleAdsClient->getCampaignServiceClient(); $request = (new MutateCampaignsRequest()) ->setCustomerId($customerId) ->setCampaignOperations($campaignOperations); $response = $campaignServiceClient->mutateCampaigns($request); |
示例 1.2:带有必需形参和可选形参的方法
以下示例代码比较了在GoogleAdsServiceClient::search()
GAPIC v1 和 v2。在此示例中,在 GAPIC 中生成的 build()
v2 源代码仅接受两个参数($customerId
和 $query
),因为
它们都是必需参数请求获取匹配的结果总数
查询忽略 LIMIT
子句,则必须使用
setReturnTotalResultsCount()
。或者,您可以将所有参数
添加到 SearchGoogleAdsRequest
的构造函数中,如模式 3 所示。
模式 1 | GAPIC v1
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $response = $googleAdsServiceClient->search( $customerId, $query, ['returnTotalResultsCount' => true] ); $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $response = $googleAdsServiceClient->search( SearchGoogleAdsRequest::build($customerId, $query) ->setReturnTotalResultsCount(true) ); |
模式 2 | GAPIC v1
N/A $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $request = (new SearchGoogleAdsRequest()) ->setCustomerId($customerId) ->setQuery($query) ->setReturnTotalResultsCount(true); $response = $googleAdsServiceClient->search($request); |
模式 3 | GAPIC v1
N/A $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $request = (new SearchGoogleAdsRequest([ 'customer_id' => $customerId, 'query' => $query, 'return_total_results_count' => true ]); $response = $googleAdsServiceClient->search($request); |
示例 2:仅包含可选参数的方法
比较以下时间段内对 GeoTargetConstantServiceClient::suggestGeoTargetConstants()
的调用
GAPIC v1 和 v2。由于
GeoTargetConstantServiceClient::suggestGeoTargetConstants()
是可选的,
在这种情况下,GAPIC v2 源代码中没有生成 build()
。
必须自行创建请求对象
模式 1 | GAPIC v1
$geoTargetConstantServiceClient = $googleAdsClient->getGeoTargetConstantServiceClient(); $response = $geoTargetConstantServiceClient->suggestGeoTargetConstants([ 'locale' => $locale, 'countryCode' => $countryCode, 'locationNames' => new LocationNames(['names' => $locationNames]) ]); $geoTargetConstantServiceClient = $googleAdsClient->getGeoTargetConstantServiceClient(); $request = (new SuggestGeoTargetConstantsRequest()) ->setLocale($locale) ->setCountryCode($countryCode) ->setLocationNames(new LocationNames(['names' => $locationNames])); $response = $geoTargetConstantServiceClient->suggestGeoTargetConstants($request); |
模式 2 | GAPIC v1
N/A $geoTargetConstantServiceClient = $googleAdsClient->getGeoTargetConstantServiceClient(); $response = $geoTargetConstantServiceClient->suggestGeoTargetConstants( new SuggestGeoTargetConstantsRequest([ 'locale' => $locale, 'country_code' => $countryCode, 'location_names' => new LocationNames(['names' => $locationNames]) ]) ); |