API Gmail подчиняется ограничениям использования, которые ограничивают частоту вызова методов API. Ограничения определяются в единицах квоты — абстрактной единице измерения, представляющей использование ресурсов Gmail. Одновременно применяются два ограничения использования: ограничение на количество вызовов для каждого проекта и ограничение на количество вызовов для каждого пользователя.
В следующей таблице подробно указаны эти ограничения:
| Тип ограничения использования | Лимит | Код ошибки |
|---|---|---|
| Ограничение по ставкам на проект | 1 200 000 квотных единиц в минуту | rateLimitExceeded |
| Ограничение на количество пользователей | 15 000 квотных единиц в минуту на пользователя | userRateLimitExceeded |
Для получения информации об обработке ошибок, связанных с превышением лимита, см. раздел «Устранение ошибок» .
Использование квот для каждого метода
Количество единиц квоты, потребляемых запросом, зависит от вызываемого метода. В следующей таблице показано использование единиц квоты для каждого метода:
| Метод | квотных единиц |
|---|---|
drafts.create | 10 |
drafts.delete | 10 |
drafts.get | 5 |
drafts.list | 5 |
drafts.send | 100 |
drafts.update | 15 |
getProfile | 1 |
history.list | 2 |
labels.create | 5 |
labels.delete | 5 |
labels.get | 1 |
labels.list | 1 |
labels.update | 5 |
messages.attachments.get | 5 |
messages.batchDelete | 50 |
messages.batchModify | 50 |
messages.delete | 10 |
messages.get | 5 |
messages.import | 25 |
messages.insert | 25 |
messages.list | 5 |
messages.modify | 5 |
messages.send | 100 |
messages.trash | 5 |
messages.untrash | 5 |
settings.delegates.create | 100 |
settings.delegates.delete | 5 |
settings.delegates.get | 1 |
settings.delegates.list | 1 |
settings.filters.create | 5 |
settings.filters.delete | 5 |
settings.filters.get | 1 |
settings.filters.list | 1 |
settings.forwardingAddresses.create | 100 |
settings.forwardingAddresses.delete | 5 |
settings.forwardingAddresses.get | 1 |
settings.forwardingAddresses.list | 1 |
settings.getAutoForwarding | 1 |
settings.getImap | 1 |
settings.getPop | 1 |
settings.getVacation | 1 |
settings.sendAs.create | 100 |
settings.sendAs.delete | 5 |
settings.sendAs.get | 1 |
settings.sendAs.list | 1 |
settings.sendAs.update | 100 |
settings.sendAs.verify | 100 |
settings.updateAutoForwarding | 5 |
settings.updateImap | 5 |
settings.updatePop | 100 |
settings.updateVacation | 5 |
stop | 50 |
threads.delete | 20 |
threads.get | 10 |
threads.list | 10 |
threads.modify | 10 |
threads.trash | 10 |
threads.untrash | 10 |
watch | 100 |
При использовании API Gmail также существует ограничение в 500 получателей на одно электронное письмо.
Устранение ошибок, связанных с временными квотами.
Для всех ошибок, связанных со временем (максимум N запросов за X минут), мы рекомендуем, чтобы ваш код перехватывал исключение и использовал усеченную экспоненциальную задержку , чтобы ваши устройства не создавали чрезмерную нагрузку.
Экспоненциальная задержка — это стандартная стратегия обработки ошибок в сетевых приложениях. Алгоритм экспоненциальной задержки повторяет запросы, используя экспоненциально увеличивающиеся промежутки времени ожидания между запросами, вплоть до максимального времени задержки. Если запросы по-прежнему не удаются, важно, чтобы задержки между запросами увеличивались со временем, пока запрос не будет успешно выполнен.
Пример алгоритма
Алгоритм экспоненциальной задержки повторяет запросы в экспоненциальном порядке, увеличивая время ожидания между повторными попытками до максимального значения задержки. Например:
- Отправьте запрос к API Gmail.
- Если запрос не удался, подождите 1 +
random_number_millisecondsи повторите запрос. - Если запрос не удался, подождите 2 +
random_number_millisecondsи повторите запрос. - Если запрос не удался, подождите 4 +
random_number_millisecondsи повторите запрос. - И так далее, вплоть до
maximum_backoffвремени задержки. - Продолжайте ждать и повторять попытки до определенного максимального количества раз, но не увеличивайте интервал ожидания между повторными попытками.
где:
- Время ожидания составляет
min(((2^n)+random_number_milliseconds), maximum_backoff), при этомnувеличивается на 1 для каждой итерации (запроса). -
random_number_milliseconds— это случайное число миллисекунд, меньшее или равное 1000. Это помогает избежать ситуаций, когда множество клиентов синхронизированы из-за какой-либо ситуации и все они одновременно повторяют запрос, отправляя его синхронизированными волнами. Значениеrandom_number_millisecondsпересчитывается после каждого повторного запроса. -
maximum_backoffобычно составляет 32 или 64 секунды. Подходящее значение зависит от конкретного случая использования.
Клиент может продолжать попытки после достижения значения maximum_backoff time. После этого значения увеличение backoff time не требуется. Например, если клиент использует значение maximum_backoff time равное 64 секундам, то после достижения этого значения он может повторять попытки каждые 64 секунды. В какой-то момент клиентам следует запретить бесконечные повторные попытки.
Время ожидания между повторными попытками и количество повторных попыток зависят от сценария использования и условий сети.
Цены
Использование API Gmail полностью бесплатно. Превышение лимитов запросов не влечет за собой дополнительных расходов, и с вашего счета не взимается плата.
Запросить увеличение квоты
В зависимости от объема используемых ресурсов вашего проекта, вам может потребоваться запросить корректировку квоты. Вызовы API, выполняемые сервисным аккаунтом, считаются использованием одного аккаунта. Подача заявки на корректировку квоты не гарантирует ее одобрения. Запросы на корректировку квоты, которые значительно увеличат ее значение, могут обрабатываться дольше.
Не все проекты имеют одинаковые квоты. По мере того, как вы будете все больше использовать Google Cloud, значения ваших квот могут потребовать увеличения. Если вы ожидаете значительного увеличения использования в будущем, вы можете заблаговременно запросить корректировку квот на странице «Квоты» в консоли Google Cloud.
Для получения более подробной информации ознакомьтесь со следующими ресурсами:
- О корректировке квот
- Просмотрите текущий уровень использования квоты и лимиты.
- Запросить увеличение лимита квоты
Связанные темы
- Повышение производительности
- Ограничения на отправку и получение почты
- Ограничения на отправку писем в Gmail в Google Workspace