Tous les services de l'API Google Ads disposent de paramètres par défaut, y compris des délais d'attente, qui sont utilisés par le transport. Chaque service d'une version donnée de l'API Google Ads dispose d'un fichier JSON dédié avec ces paramètres par défaut définis au niveau du service et de la méthode. Par exemple, vous trouverez les fichiers de configuration des ressources de service pour la dernière version de l'API Google Ads sur GitHub.
Les paramètres par défaut conviennent à la plupart des cas d'utilisation, mais il peut arriver que vous deviez les remplacer. La bibliothèque cliente pour PHP permet de remplacer les paramètres de délai avant expiration par appel (spécifiés en millisecondes à l'aide de l'option timeoutMillis) pour les appels de streaming serveur et les appels unaires.
Bien que vous puissiez configurer des valeurs de délai avant expiration élevées (par exemple, deux heures ou plus) dans la bibliothèque cliente, les proxys réseau sous-jacents ou le serveur d'API peuvent toujours mettre fin aux requêtes de longue durée plus tôt et renvoyer une erreur d'état DEADLINE_EXCEEDED.
Remplacer les délais d'inactivité pour un appel de streaming de serveur
La seule méthode de service de l'API Google Ads qui utilise un appel de streaming serveur est GoogleAdsService.SearchStream. Pour remplacer le délai avant expiration par défaut, transmettez timeoutMillis (en millisecondes) dans le tableau d'options d'appel facultatif lorsque vous appelez la méthode :
private static function makeServerStreamingCall( GoogleAdsClient $googleAdsClient, int $customerId ) { $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves all campaign IDs. $query = 'SELECT campaign.id FROM campaign'; $output = ''; try { // Issues a search stream request by setting a custom client timeout. /** * @var GoogleAdsServerStreamDecorator $stream */ $stream = $googleAdsServiceClient->searchStream( SearchGoogleAdsStreamRequest::build($customerId, $query), [ // Any server streaming call has a default timeout setting. For this // particular call, the default setting can be found in the following file: // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V25/Services/resources/google_ads_service_client_config.json. // // When making a server streaming call, an optional argument is provided and can // be used to override the default timeout setting with a given value. 'timeoutMillis' => self::CLIENT_TIMEOUT_MILLIS ] ); // Iterates over all rows in all messages and collects the campaign IDs. foreach ($stream->iterateAllElements() as $googleAdsRow) { /** * @var GoogleAdsRow $googleAdsRow */ $output .= ' ' . $googleAdsRow->getCampaign()->getId(); } print 'The server streaming call completed before the timeout.' . PHP_EOL; } catch (ApiException $exception) { if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) { print 'The server streaming call did not complete before the timeout.' . PHP_EOL; } else { // Bubbles up if the exception is not about timeout. throw $exception; } } finally { print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL; } }
Remplacer les délais avant expiration pour un appel unaire
La plupart des méthodes de service de l'API Google Ads utilisent des appels unaires. Les exemples typiques sont GoogleAdsService.Search et GoogleAdsService.Mutate. Pour remplacer le délai avant expiration par défaut, transmettez timeoutMillis (en millisecondes) dans le tableau d'options d'appel facultatif lorsque vous appelez la méthode :
private static function makeUnaryCall(GoogleAdsClient $googleAdsClient, int $customerId) { $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Creates a query that retrieves all campaign IDs. $query = 'SELECT campaign.id FROM campaign'; $output = ''; try { // Issues a search request by setting a custom client timeout. $response = $googleAdsServiceClient->search( SearchGoogleAdsRequest::build($customerId, $query), [ // Any unary call is retryable and has default retry settings. // Complete information about these settings can be found here: // https://googleapis.github.io/gax-php/master/Google/ApiCore/RetrySettings.html. // For this particular call, the default retry settings can be found in the // following file: // https://github.com/googleads/google-ads-php/blob/master/src/Google/Ads/GoogleAds/V25/Services/resources/google_ads_service_client_config.json. // // When making an unary call, an optional argument is provided and can be // used to override the default retry settings with given values. 'retrySettings' => [ // Sets the maximum accumulative timeout of the call, it includes all tries. 'totalTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS, // Sets the timeout that is used for the first try to one tenth of the // maximum accumulative timeout of the call. // Note: This overrides the default value and can lead to // RequestError.RPC_DEADLINE_TOO_SHORT errors when too small. We recommend // to do it only if necessary. 'initialRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 10, // Sets the maximum timeout that can be used for any given try to one fifth // of the maximum accumulative timeout of the call (two times greater than // the timeout that is used for the first try). 'maxRpcTimeoutMillis' => self::CLIENT_TIMEOUT_MILLIS / 5 ] ] ); // Iterates over all rows in all messages and collects the campaign IDs. foreach ($response->iterateAllElements() as $googleAdsRow) { /** * @var GoogleAdsRow $googleAdsRow */ $output .= ' ' . $googleAdsRow->getCampaign()->getId(); } print 'The unary call completed before the timeout.' . PHP_EOL; } catch (ApiException $exception) { if ($exception->getStatus() === ApiStatus::DEADLINE_EXCEEDED) { print 'The unary call did not complete before the timeout.' . PHP_EOL; } else { // Bubbles up if the exception is not about timeout. throw $exception; } } finally { print 'All campaign IDs retrieved:' . ($output ?: ' None') . PHP_EOL; } }