En esta página, se enumeran los errores que puedes recibir de la API de User Deletion y se explica cómo controlar los errores 500 y implementar la retirada exponencial.
Respuestas de error estándar
Si una solicitud a la API de User Deletion se realiza correctamente, la API muestra un código de estado 200
.
Si se produce un error con una solicitud, la API muestra un código de estado HTTP, un estado y un motivo en la respuesta según el tipo de error. Además, el cuerpo de la respuesta contiene una descripción detallada de lo que causó el error. Este es un ejemplo de una respuesta de error:
{ "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]" } }
Tabla de errores
Código | Motivo | Descripción | Acción recomendada |
---|---|---|---|
400 | invalidParameter |
Indica que un parámetro de solicitud tiene un valor no válido. Los campos locationType y location en la respuesta de error proporcionan información sobre el valor que no era válido. |
No vuelvas a intentar la operación sin solucionar el problema. Debes proporcionar un valor válido para el parámetro especificado en la respuesta de error. |
400 | badRequest |
Indica que la consulta no era válida. P.ej., faltaba el ID superior o la combinación de dimensiones o métricas solicitada no era válida. | No vuelvas a intentar la operación sin solucionar el problema. Debes realizar cambios en la consulta a la API para que funcione. |
401 | invalidCredentials |
Indica que el token de autenticación no es válido o venció. | No vuelvas a intentar la operación sin solucionar el problema. Debes obtener un nuevo token de autenticación. |
403 | insufficientPermissions |
Indica que el usuario no tiene permisos suficientes para la entidad especificada en la consulta. | No vuelvas a intentar la operación sin solucionar el problema. Debes obtener permisos suficientes para realizar la operación en la entidad especificada. |
403 | dailyLimitExceeded |
Indica que el usuario superó la cuota diaria (por proyecto o por vista (perfil)). | No vuelvas a intentar la operación sin solucionar el problema. Usaste tu cuota diaria. Consulta Límites y cuotas de la API. |
403 | userRateLimitExceeded |
Indica que se superó el límite de Consultas por 100 segundos por usuario. El valor predeterminado establecido en la Consola de APIs de Google es 100 consultas cada 100 segundos, por usuario. Puedes aumentar este límite en la Consola de API de Google hasta un máximo de 1,000. | Vuelve a intentarlo con la retirada exponencial. Debes disminuir la velocidad a la que envías las solicitudes. |
403 | rateLimitExceeded |
Indica que se superaron los límites de frecuencia de consultas por 100 segundos del proyecto. | Vuelve a intentarlo con la retirada exponencial. Debes reducir la velocidad a la que envías las solicitudes. |
403 | quotaExceeded |
Indica que se alcanzaron las 10 solicitudes simultáneas por vista (perfil) en la API de Core Reporting. | Vuelve a intentarlo con la retirada exponencial. Debes esperar a que se complete al menos una solicitud en curso para esta vista (perfil). |
500 | internalServerError |
Se produjo un error inesperado del servidor interno. | No vuelvas a intentar esta consulta más de una vez. |
503 | backendError |
El servidor mostró un error. | No vuelvas a intentar esta consulta más de una vez. |
Controla las respuestas 500 o 503
Es posible que se produzca un error 500
o 503
durante una carga pesada o para solicitudes más grandes y complejas. Para solicitudes más grandes, considera solicitar datos por un período más corto. También considera implementar la retirada exponencial. La frecuencia de estos errores puede depender de la vista (perfil) y de la cantidad de datos de informes asociados con esa vista. Una consulta que genera un error 500
o 503
para una vista (perfil) no necesariamente generará un error para la misma consulta con una vista (perfil) diferente.
Implementa la retirada exponencial
La retirada exponencial es el proceso en el que un cliente reintenta periódicamente una solicitud con errores durante un período creciente. Es una estrategia estándar de manejo de errores para aplicaciones de red. La API de User Deletion se diseñó con la expectativa de que los clientes que elijan volver a intentar solicitudes fallidas lo hagan con la retirada exponencial. Además de ser “obligatorio”, el uso de la retirada exponencial aumenta la eficiencia del uso del ancho de banda, reduce la cantidad de solicitudes necesarias para obtener una respuesta correcta y maximiza la capacidad de procesamiento de las solicitudes en entornos simultáneos.
A continuación, se muestra cómo implementar la retirada exponencial:
- Realizar una solicitud a la API
- Reciben una respuesta de error que tiene un código de error que se puede reintentar.
- Espera 1 s +
random_number_milliseconds
segundos. - Vuelve a intentar la solicitud.
- Recibir una respuesta de error que tenga un código de error que se pueda reintentar
- Espera 2 s y
random_number_milliseconds
segundos. - Vuelve a intentar la solicitud.
- Recibir una respuesta de error que tenga un código de error que se pueda reintentar
- Espera 4 s y
random_number_milliseconds
segundos. - Vuelve a intentar la solicitud.
- Recibir una respuesta de error que tenga un código de error que se pueda reintentar
- Espera 8 s +
random_number_milliseconds
segundos. - Vuelve a intentar la solicitud.
- Recibir una respuesta de error que tenga un código de error que se pueda reintentar
- Espera 16 s +
random_number_milliseconds
segundos. - Reintentar solicitud
- Si aún recibes un error, detente y registra el error.
En el flujo anterior, random_number_milliseconds
es una cantidad aleatoria de milisegundos menor o igual que 1,000. Esto es necesario para evitar ciertos errores de bloqueo en algunas implementaciones simultáneas. random_number_milliseconds
se debe volver a definir después de cada espera.
El algoritmo está configurado para terminar cuando n sea 5. Este límite existe solo para evitar que los clientes vuelvan a intentarlo de forma infinita y genera un retraso total de alrededor de 32 segundos antes de que una solicitud se considere "un error irrecuperable".
El siguiente código de Python es una implementación del flujo anterior para recuperarse de los errores que se producen en un método llamado 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."