Risposte di errore

Questa pagina elenca gli errori che potresti ricevere dall'API User Deletion e spiega come gestire gli errori 500 e implementare il backoff esponenziale.

Risposte di errore standard

Se una richiesta all'API di eliminazione degli utenti va a buon fine, l'API restituisce un codice di stato 200. Se si verifica un errore con una richiesta, l'API restituisce un codice di stato HTTP, uno stato e il motivo della risposta in base al tipo di errore. Inoltre, il corpo della risposta contiene una descrizione dettagliata della causa dell'errore. Ecco un esempio di risposta di errore:

 { "error": { "errors": [ { "domain": "global", "reason": "invalidParameter",
"message": "Invalid value '-1' for max-results. Value must be within the range:
[1, 1000]", "locationType": "parameter", "location": "max-results" } ], "code":
400, "message": "Invalid value '-1' for max-results. Value must be within the
range: [1, 1000]" } }

Tabella degli errori

Codice Motivo Descrizione Azione consigliata
400 invalidParameter Indica che un parametro di richiesta ha un valore non valido. I campi locationType e location nella risposta all'errore forniscono informazioni sul valore non valido. Non riprovare senza risolvere il problema. Devi fornire un valore valido per il parametro specificato nella risposta di errore.
400 badRequest Indica che la query non è valida. Ad esempio, l'ID entità principale non era presente o la combinazione di dimensioni o metriche richieste non era valida. Non riprovare senza risolvere il problema. Per il funzionamento della query dell'API, devi apportare modifiche.
401 invalidCredentials Indica che il token di autenticazione non è valido o è scaduto. Non riprovare senza risolvere il problema. Devi ottenere un nuovo token di autenticazione.
403 insufficientPermissions Indica che l'utente non dispone di autorizzazioni sufficienti per l'entità specificata nella query. Non riprovare senza risolvere il problema. Devi disporre di autorizzazioni sufficienti per eseguire l'operazione sull'entità specificata.
403 dailyLimitExceeded Indica che l'utente ha superato la quota giornaliera (per progetto o per visualizzazione (profilo)). Non riprovare senza risolvere il problema. Hai esaurito la quota giornaliera. Consulta Limiti e quote delle API.
403 userRateLimitExceeded Indica che il limite di query ogni 100 secondi per utente è stato superato. Il valore predefinito impostato nella console API Google è 100 query ogni 100 secondi per utente. Puoi aumentare questo limite nella console API di Google fino a un massimo di 1000. Riprova utilizzando il backoff esponenziale. Devi rallentare la frequenza di invio delle richieste.
403 rateLimitExceeded Indica che sono stati superati i limiti di frequenza delle query per 100 secondi del progetto. Riprova utilizzando il backoff esponenziale. Devi rallentare la frequenza di invio delle richieste.
403 quotaExceeded Indica che sono state raggiunte le 10 richieste simultanee per visualizzazione (profilo) nell'API Core Reporting. Riprova utilizzando il backoff esponenziale. Devi attendere il completamento di almeno una richiesta in corso per questa visualizzazione (profilo).
500 internalServerError Si è verificato un errore interno del server imprevisto. Non riprovare a eseguire questa query più volte.
503 backendError Il server ha restituito un errore. Non riprovare questa query più di una volta.

Gestione delle risposte 500 o 503

Un errore 500 o 503 potrebbe verificarsi durante un carico elevato o per richieste più grandi e complesse. Per richieste più grandi, valuta la possibilità di richiedere dati per un periodo di tempo più breve. Valuta anche la possibilità di implementare il backoff esponenziale. La frequenza di questi errori può dipendere dalla vista (profilo) e dalla quantità di dati dei report associati a quella vista. Una query che causa un errore 500 o 503 per una vista (profilo) non causerà necessariamente un errore per la stessa query con una vista (profilo) diversa.

Implementare il backoff esponenziale

Il backoff esponenziale è il processo mediante il quale un client riprova periodicamente una richiesta non riuscita per un periodo di tempo sempre maggiore. Si tratta di una strategia di gestione degli errori standard per le applicazioni di rete. L'API User Deletion è progettata pensando ai client che scelgono di riprovare le richieste non riuscite utilizzando il backoff esponenziale. Oltre ad essere "obbligatorio", l'utilizzo del backoff esponenziale aumenta l'efficienza dell'utilizzo della larghezza di banda, riduce il numero di richieste richieste per ottenere una risposta positiva e massimizza il throughput delle richieste in ambienti simultanei.

Ecco come implementare il backoff esponenziale:

  1. Effettua una richiesta all'API.
  2. Ricevere una risposta di errore con un codice di errore che consente di riprovare.
  3. Attendi 1 s + random_number_milliseconds secondi.
  4. Riprova a inviare la richiesta.
  5. Ricevere una risposta di errore con un codice di errore che consente di riprovare.
  6. Attendi 2 secondi + random_number_milliseconds secondi.
  7. Riprova a inviare la richiesta.
  8. Ricevere una risposta di errore con un codice di errore che consente di riprovare.
  9. Attendi 4 secondi + random_number_milliseconds secondi.
  10. Riprova a inviare la richiesta.
  11. Ricevere una risposta di errore con un codice di errore che consente di riprovare.
  12. Attendi 8 secondi + random_number_milliseconds secondi.
  13. Riprova a inviare la richiesta.
  14. Ricevi una risposta di errore con un codice di errore che è possibile riprovare.
  15. Attendi 16 secondi + random_number_milliseconds secondi.
  16. Riprova la richiesta.
  17. Se continui a ricevere un errore, interrompi e registra l'errore.

Nel flusso precedente, random_number_milliseconds è un numero random di millisecondi minore o uguale a 1000. Questo è necessario per evitare determinati errori di blocco in alcune implementazioni simultanee. random_number_milliseconds deve essere ridefinito dopo ogni attesa.

L'algoritmo è impostato per terminare quando n è 5. Questo limite è in vigore solo per impedire ai client di riprovare all'infinito e comporta un ritardo totale di circa 32 secondi prima che una richiesta venga considerata "un errore non recuperabile".

Il seguente codice Python è un'implementazione del flusso precedente per il recupero dagli errori che si verificano in un metodo chiamato makeRequest.

import random
import time
from apiclient.errors import HttpError

def makeRequestWithExponentialBackoff(analytics):
  """Wrapper to request Google Analytics data with exponential backoff.

  The makeRequest method accepts the analytics service object, makes API
  requests and returns the response. If any error occurs, the makeRequest
  method is retried using exponential backoff.

  Args:
    analytics: The analytics service object

  Returns:
    The API response from the makeRequest method.
  """
  for n in range(0, 5):
    try:
      return makeRequest(analytics)

    except HttpError, error:
      if error.resp.reason in ['userRateLimitExceeded', 'quotaExceeded',
                               'internalServerError', 'backendError']:
        time.sleep((2 ** n) + random.random())
      else:
        break

  print "There has been an error, the request never succeeded."