Превышен предел скорости пользователя с API Google Drive

Я создаю веб-приложение на основе API Google Диска. В основном веб-приложение отображает фото и видео. Мультимедиа хранятся в папке Google Диска: после аутентификации приложение делает запросы к Google Drive API, чтобы получить URL-адрес для мультимедиа, и отображает каждый из них. На данный момент у меня есть только 16 изображений для отображения. Эти изображения жестко прописаны в приложении (для демонстрации).

У меня возникла проблема с доступом моего приложения к API Google Диска. Действительно, после нескольких попыток у меня возникла эта ошибка для случайных запросов

User Rate Limit Exceeded. Rate of requests for user exceed configured project quota. You may consider re-evaluating expected per-user traffic to the API and adjust project quota limits accordingly. You may monitor aggregate quota usage and adjust limits in the API Console: https://console.developers.google.com/apis/api/drive.googleapis.com/quotas?project=XXXXXXX"

Так что я посмотрел консоль API и ничего особенного не увидел, я не превышаю лимит скорости по моему мнению. Может я неправильно использую Google API, на самом деле не знаю ...

Превышен предел скорости пользователя с API Google Drive

Я следил за документацией по API Google Диска, чтобы проверить, не сделал ли я что-то не так. Для каждого запроса API запрос содержит токен доступа, поэтому он должен работать правильно!

Доступна демонстрация приложения: https://poc-drive-api.firebaseapp.com

Также доступен исходный код: https://github.com/Mcdostone/poc-google-drive-api (файл App.js)

см. stackoverflow.com/questions/18578768/… и stackoverflow.com/questions/18529524/…. Вам нужно реализовать дросселирование. NB НЕТ экспоненциальная отсрочка

pinoyyid 06.12.2018 20:55

В моем случае одновременная загрузка 50 -> 200 файлов с использованием curl multiple. Я купил 10 VPS только для того, чтобы проксировать запрос, чтобы избежать ограничения скорости, но этого не произошло. Вероятно, использование нескольких учетных записей может решить проблему.

John Doe 18.04.2019 19:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
2
17 179
5

Ответы 5

403: Превышен предел скорости пользователя - защита от флуда. Пользователь может делать только определенное количество запросов за раз. к сожалению, ограничение скорости пользователя не отображается на графике, на который вы смотрите. Этот график действительно плохо показывает, что на самом деле происходит. Google тестирует в фоновом режиме и выдает ошибку, если вы превышаете свой лимит. Они не обязаны показывать нам, что на графике

403: User Rate Limit Exceeded

The per-user limit has been reached. This may be the limit from the Developer Console or a limit from the Drive backend.

{ "error": { "errors": [ { "domain": "usageLimits", "reason": "userRateLimitExceeded", "message": "User Rate Limit Exceeded" } ], "code": 403, "message": "User Rate Limit Exceeded" } }

Suggested actions:

  • Raise the per-user quota in the Developer Console project.
  • If one user is making a lot of requests on behalf of many users of a G Suite domain, consider a Service Account with authority delegation (setting the quotaUser parameter).
  • Use exponential backoff.

ИМО, главное, что нужно сделать, когда вы начнете сталкиваться с этим сообщением об ошибке, - это реализовать экспоненциальный откат, чтобы ваше приложение могло замедлиться и снова сделать запрос.

В моем случае я параллельно просматривал папки Google Диска и получал эту ошибку. Я решил проблему, реализовав ограничение скорости на стороне клиента с помощью библиотеки Узкое место с задержкой 110 мс между запросами:

const limiter = new Bottleneck({
    // Google allows 1000 requests per 100 seconds per user,
    // which is 100ms per request on average. Adding a delay
    // of 100ms still triggers "rate limit exceeded" errors,
    // so going with 110ms.
    minTime: 110,
});

// Wrap every API request with the rate limiter
await limiter.schedule(() => drive.files.list({
    // Params...
}));

Я использовал библиотеку ограничитель, чтобы установить ограничение «1000 запросов в 100 секунд», но все равно получал 403 ошибки. Наконец я наткнулся на страницу это, где упоминается, что:

In the API Console, there is a similar quota referred to as Requests per 100 seconds per user. By default, it is set to 100 requests per 100 seconds per user and can be adjusted to a maximum value of 1,000. But the number of requests to the API is restricted to a maximum of 10 requests per second per user.

Поэтому я обновил библиотеку ограничителей, чтобы разрешать только 10 запросов в секунду вместо 1000 каждые 100 секунд, и это работало как шарм.

const RateLimiter = require('limiter').RateLimiter;

const limiter = new RateLimiter(10, 1000);

Я не думаю, что это актуально, потому что страница, на которую вы ссылаетесь, не ограничивает API Google Диска, но говорит: "Следующие квоты применяются к Management API, Core Reporting API v3, MCF Reporting API, Metadata API, User Deletion API. и API отчетов в реальном времени "

Mikael Finstad 06.10.2021 15:42

Вы можете использовать созданную мной библиотеку с нулевой зависимостью под названием Очередь с ограничением скорости, чтобы ограничить скорость выполнения задач в очереди.

Ограничение 10 запросов в секунду может быть достигнуто следующим образом:

const createQueue = require("rate-limited-queue");

const queue = createQueue(
  1000 /* time based sliding window */,
  10 /* max concurrent tasks in the sliding window */);

const results = await queue([
  () => { /* a request code goes here */ },
  () => { /* another request code goes here */ }
  // ...
]);

Вы можете скачать любой конкретный файл с Google Диска в свой колаб .. использовать

! gdown https://drive.google.com/uc?id=14ikT5VererdfeOnQtIJREINKSDN

где значение идентификатора сообщения - это то, что вы получите, когда нажмете ссылку для общего доступа к файлу на диске

Другие вопросы по теме