На этой странице перечислены ошибки, которые вы можете получить от API удаления пользователей, и объясняется, как обрабатывать 500 ошибок и реализовать экспоненциальную отсрочку .
Стандартные ответы на ошибки
Если запрос API удаления пользователя успешен, API возвращает код состояния 200
. Если при запросе возникает ошибка, API возвращает в ответе код состояния HTTP, статус и причину в зависимости от типа ошибки. Кроме того, тело ответа содержит подробное описание причины ошибки. Вот пример ответа об ошибке:
{ "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]" } }
Таблица ошибок
Код | Причина | Описание | Рекомендуемое действие |
---|---|---|---|
400 | invalidParameter | Указывает, что параметр запроса имеет недопустимое значение. Поля locationType и location в ответе об ошибке предоставляют информацию о том, какое значение было недопустимым. | Не повторяйте попытку, не устранив проблему. Вам необходимо указать допустимое значение параметра, указанного в ответе об ошибке. |
400 | badRequest | Указывает, что запрос недействителен. Например, отсутствовал родительский идентификатор или запрошенная комбинация параметров или показателей была недопустимой. | Не повторяйте попытку, не устранив проблему. Вам необходимо внести изменения в запрос API, чтобы он работал. |
401 | invalidCredentials | Указывает, что токен аутентификации недействителен или срок его действия истек. | Не повторяйте попытку, не устранив проблему. Вам необходимо получить новый токен авторизации. |
403 | insufficientPermissions | Указывает, что у пользователя недостаточно разрешений для объекта, указанного в запросе. | Не повторяйте попытку, не устранив проблему. Вам необходимо получить достаточные разрешения для выполнения операции с указанным объектом. |
403 | dailyLimitExceeded | Указывает, что пользователь превысил дневную квоту (либо на проект, либо на представление (профиль)). | Не повторяйте попытку, не устранив проблему. Вы израсходовали дневную норму. См . раздел «Ограничения и квоты API» . |
403 | userRateLimitExceeded | Указывает, что превышено ограничение количества запросов в 100 секунд на одного пользователя . Значение по умолчанию, установленное в консоли Google API, составляет 100 запросов на 100 секунд на пользователя. Вы можете увеличить это ограничение в консоли Google API максимум до 1000. | Повторите попытку, используя экспоненциальную задержку . Вам необходимо замедлить скорость отправки запросов. |
403 | rateLimitExceeded | Указывает, что превышены ограничения скорости запросов проекта за 100 секунд . | Повторите попытку, используя экспоненциальную задержку . Вам необходимо замедлить скорость отправки запросов. |
403 | quotaExceeded | Указывает, что достигнуто 10 одновременных запросов на представление (профиль) в Core Reporting API. | Повторите попытку, используя экспоненциальную задержку . Для завершения этого представления (профиля) вам необходимо дождаться хотя бы одного текущего запроса. |
500 | internalServerError | Произошла непредвиденная внутренняя ошибка сервера. | Не повторяйте этот запрос более одного раза. |
503 | backendError | Сервер вернул ошибку. | Не повторяйте этот запрос более одного раза. |
Обработка 500 или 503 ответов
Ошибка 500
или 503
может возникнуть при большой нагрузке или при выполнении более крупных и сложных запросов. Для более крупных запросов рассмотрите возможность запроса данных за более короткий период времени. Также рассмотрите возможность реализации экспоненциальной задержки . Частота этих ошибок может зависеть от представления (профиля) и объема данных отчетов, связанных с этим представлением; Запрос, вызывающий ошибку 500
или 503
для одного представления (профиля), не обязательно вызовет ошибку для того же запроса с другим представлением (профилем).
Реализуйте экспоненциальную отсрочку
Экспоненциальная отсрочка — это процесс, при котором клиент периодически повторяет неудачный запрос в течение увеличивающегося промежутка времени. Это стандартная стратегия обработки ошибок для сетевых приложений. API удаления пользователей разработан с расчетом на то, что клиенты, решившие повторить неудачные запросы, будут делать это с использованием экспоненциальной задержки. Помимо того, что использование экспоненциальной задержки является «обязательным», оно повышает эффективность использования полосы пропускания, уменьшает количество запросов, необходимых для получения успешного ответа, и максимизирует пропускную способность запросов в параллельных средах.
Вот как реализовать экспоненциальную отсрочку:
- Сделайте запрос к API.
- Получите ответ об ошибке с кодом ошибки, допускающим повторную попытку.
- Подождите 1 с +
random_number_milliseconds
секунд. - Повторить запрос.
- Получите ответ об ошибке с кодом ошибки, допускающим повторную попытку.
- Подождите 2 секунды +
random_number_milliseconds
секунд. - Повторить запрос.
- Получите ответ об ошибке с кодом ошибки, допускающим повторную попытку.
- Подождите 4 секунды +
random_number_milliseconds
секунд. - Повторить запрос.
- Получите ответ об ошибке с кодом ошибки, допускающим повторную попытку.
- Подождите 8 секунд +
random_number_milliseconds
секунд. - Повторить запрос.
- Получите ответ об ошибке с кодом ошибки, допускающим повторную попытку.
- Подождите 16 секунд +
random_number_milliseconds
секунд. - Повторить запрос.
- Если вы по-прежнему получаете ошибку, остановитесь и запишите ошибку.
В предыдущем потоке random_number_milliseconds
— это случайное число миллисекунд, меньшее или равное 1000. Это необходимо, чтобы избежать определенных ошибок блокировки в некоторых параллельных реализациях. random_number_milliseconds
необходимо переопределять после каждого ожидания.
Алгоритм настроен на завершение, когда n равно 5. Этот потолок установлен только для того, чтобы клиенты не могли бесконечно повторять попытки, и приводит к общей задержке около 32 секунд, прежде чем запрос будет считаться «неустранимой ошибкой».
Следующий код Python представляет собой реализацию предыдущего потока для восстановления ошибок, возникающих в методе 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."