Skip to main content

Ограничения скорости для REST API

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

Сведения об ограничениях основной ставки

GitHub ограничивает количество запросов REST API, которые можно выполнять в течение определенного периода времени. Это ограничение помогает предотвратить злоупотребления и атаки типа "отказ в обслуживании" и гарантирует, что API остается доступным для всех пользователей.

Некоторые конечные точки, такие как конечные точки поиска, имеют более строгие ограничения. Дополнительные сведения об этих конечных точках см. в разделе Конечные точки REST API для ограничений скорости. API GraphQL также имеет отдельный основной предел скорости. См . раздел AUTOTITLE.

Дополнительные сведения о просмотре действий API организации, включая превышение ограничений на основную ставку, см. в разделе Просмотр аналитики API в организации.

Как правило, вы можете вычислить основное ограничение скорости для REST API на основе метода проверки подлинности, как описано ниже.

Основное ограничение скорости для пользователей, не прошедших проверку подлинности

Запросы без проверки подлинности можно выполнять, если вы извлекаете только общедоступные данные. Запросы, не прошедшие проверку подлинности, связаны с исходным IP-адресом, а не с пользователем или приложением, который сделал запрос.

Основной предел скорости для неуправляемых запросов составляет 60 запросов в час.

Основное ограничение скорости для прошедших проверку подлинности пользователей

Для выполнения запросов API можно использовать personal access token. Кроме того, можно авторизовать GitHub App или OAuth app, которые затем могут выполнять запросы API от вашего имени.

Все эти запросы учитываются по отношению к вашему личному ограничению в 5000 запросов в час. Запросы, сделанные от вашего имени GitHub App, принадлежащих организации GitHub Enterprise Cloud имеют более высокий предел скорости в 15 000 запросов в час. Аналогично, запросы, сделанные от вашего имени OAuth app, который принадлежит или одобрен организацией GitHub Enterprise Cloud, имеют более высокий лимит скорости — 15 000 запросов в час, если вы являетесь членом организации GitHub Enterprise Cloud. Однако запросы приложения с более высоким лимитом сокращают оставшийся бюджет на методы аутентификации с низкими лимитами. Например, если приложение с лимитом в 15 000 запросов делает 10 000 запросов от вашего имени, вы исчерпаете бюджет в 5 000 запросов для вашего personal access tokens, хотя у приложения осталось 5 000 запросов.

Примечание.

Конечная точка API журналов аудита Предприятия имеет ограничение скорости в 1750 запросов в час, на пользователя и IP-адрес. Если ваша интеграция получает ошибку ограничения скорости (обычно ответ 403 или 429), она должна подождать, прежде чем отправить следующий запрос в GitHub API.

Основное ограничение скорости доступа Git LFS

Запросы API требуются при отправке или скачивании содержимого Git LFS. Эти счетчики по отношению к отдельному сегменту ограничения скорости с ограничением в 300 запросов в минуту для неуправляемых запросов и 3000 запросов в минуту для прошедших проверку подлинности запросов.

Git LFS использует пакетный API, который обрабатывает 100 объектов Git LFS на запрос API по умолчанию. Это означает, что пользователи, не прошедшие проверку подлинности, могут загружать 30 000 объектов Git LFS в минуту, а прошедшие проверку подлинности пользователи могут загружать и скачивать 300 000 объектов Git LFS в минуту.

Основное ограничение скорости для установки GitHub App

GitHub Apps аутентификация с помощью маркера доступа к установке использует минимальный предел скорости установки в 5000 запросов в час. Если установка находится в организации GitHub Enterprise Cloud или enterprise, установка имеет ограничение скорости в 15 000 запросов в час.

Для установок, которые не находятся в организации GitHub Enterprise Cloud организации или enterprise, ограничение скорости установки будет масштабироваться с количеством пользователей и репозиториев. Установка с более чем 20 репозиториями получает еще 50 запросов в час для каждого репозитория. Установки, которые находятся в организации с более чем 20 пользователями, получают еще 50 запросов в час для каждого пользователя. Ограничение скорости не может превышать 12500 запросов в час.

Основные ограничения скорости для маркеров доступа пользователей GitHub App (в отличие от маркеров доступа к установке) определяются основными ограничениями скорости для прошедшего проверку подлинности пользователя. Это ограничение скорости сочетается с любыми запросами, которые другие GitHub App или OAuth app выполняются от имени этого пользователя и любые запросы, которые пользователь делает с помощью personal access token. Дополнительные сведения см. в разделе Ограничения скорости для REST API.

Основное ограничение скорости для OAuth apps

Основные ограничения скорости для маркеров доступа OAuth, созданные OAuth app, определяются основными ограничениями скорости для прошедших проверку подлинности пользователей. Это ограничение скорости сочетается с любыми запросами, которые другие GitHub App или OAuth app выполняются от имени этого пользователя и любые запросы, которые пользователь делает с помощью personal access token. См . основные ограничения скорости для пользователей, прошедших проверку подлинности.

Приложения OAuth также могут использовать идентификатор клиента и секрет клиента для получения общедоступных данных. Например:

curl -u YOUR_CLIENT_ID:YOUR_CLIENT_SECRET -I https://api.github.com/meta

Для этих запросов ограничение скорости составляет 5000 запросов в час за OAuth app. Если приложение принадлежит организации GitHub Enterprise Cloud, ограничение скорости составляет 15 000 запросов в час.

Примечание.

Никогда не включать секрет клиента приложения в клиентский код или код, который выполняется на пользовательском устройстве. Секрет клиента можно использовать для создания маркеров доступа OAuth для пользователей, которые авторизовать свое приложение, поэтому всегда следует защищать секрет клиента.

Основное ограничение скорости для GITHUB_TOKEN GitHub Actions

Встроенные GITHUB_TOKEN средства можно использовать для проверки подлинности запросов в рабочих процессах GitHub Actions . См . раздел AUTOTITLE.

Ограничение скорости GITHUB_TOKEN для каждого репозитория составляет 1000 запросов в час.

О дополнительных ограничениях скорости

Помимо ограничений основной частоты GitHub применяет ограничения вторичной частоты, чтобы предотвратить злоупотребление и сохранить API доступным для всех пользователей.

Если вы можете столкнуться с дополнительным ограничением скорости:

  •         _Сделайте слишком много одновременных запросов._ Допускается не более 100 одновременных запросов. Это ограничение используется для REST API и API GraphQL.
    
  •         _Сделайте слишком много запросов к одной конечной точке в минуту._ Для конечных точек REST API разрешено не более 900 точек в минуту, а для конечной точки API GraphQL разрешено не более 2000 точек в минуту. Дополнительные сведения о точках см. в разделе ["Вычисление точек" для дополнительного ограничения скорости](#calculating-points-for-the-secondary-rate-limit).
    
  •         _Сделайте слишком много запросов в минуту._ Допускается не более 90 секунд ЦП в 60 секунд в реальном времени. Не более 60 секунд этого времени ЦП может быть для API GraphQL. Вы можете приблизительно оценить время ЦП, измеряя общее время отклика для запросов API.
    
  •         _Слишком много запросов, которые потребляют чрезмерные вычислительные ресурсы в течение короткого периода времени._
    
  •         _Создание слишком большого объема содержимого на GitHub в течение короткого времени._ Как правило, не более 80 запросов на создание содержимого в минуту и не более 500 запросов на создание контента в час. Некоторые конечные точки имеют более низкие ограничения на создание контента. Ограничения создания контента включают действия, выполняемые на веб-интерфейсе GitHub и через REST API и API GraphQL.
    
  •         _Сделайте слишком много запросов на токены доступа OAuth за короткое время._ Не более 2 000 запросов на OAuth token доступа в час для GitHub Apps и OAuth apps.
    

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

Вычисление точек для дополнительного ограничения скорости

Некоторые ограничения вторичной частоты определяются значениями точек запросов. Для запросов GraphQL эти значения точек отделены от вычислений значений точек для основного ограничения скорости.

ЗапроситьТочки
Запросы GraphQL без изменений1
Запросы GraphQL с изменениями5
Большинство REST API GETи HEAD``OPTIONS запросов1
Большинство REST APIPOST, PATCH``PUTили DELETE запросов5

Некоторые конечные точки REST API имеют другую стоимость точки, которая не является общедоступной.

Проверка состояния ограничения скорости

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

Имя заголовкаDescription
x-ratelimit-limitМаксимальное количество запросов, которые можно сделать в час
x-ratelimit-remainingКоличество запросов, оставшихся в текущем окне ограничения скорости
x-ratelimit-usedКоличество запросов, выполненных в текущем окне ограничения скорости
x-ratelimit-resetВремя сброса текущего ограничения скорости в секундах в формате UTC
x-ratelimit-resourceРесурс ограничения скорости, к которому подсчитывается запрос. Дополнительные сведения о различных ресурсах см. в разделе Конечные точки REST API для ограничений скорости.

Вы также можете вызвать конечную точку GET /rate_limit , чтобы проверить ограничение скорости. Вызов этой конечной точки не учитывается в отношении основного ограничения скорости, но он может подсчитываться в отношении дополнительного ограничения скорости. См . раздел AUTOTITLE. По возможности следует использовать заголовки ответов ограничения скорости вместо вызова API, чтобы проверить ограничение скорости.

Нет способа проверить состояние дополнительного ограничения скорости.

Превышение предела скорости

Если вы превышаете основной предел скорости, вы получите 403 или 429 ответ, и x-ratelimit-remaining заголовок будет 0. Не следует повторять запрос до тех пор, пока не указано время, указанное заголовком x-ratelimit-reset .

При превышении дополнительного ограничения скорости вы получите 403 или 429 ответ и сообщение об ошибке, указывающее, что превышено дополнительное ограничение скорости. retry-after Если заголовок ответа присутствует, не следует повторять запрос до тех пор, пока не истекло много секунд. Если заголовок x-ratelimit-remaining имеет значение 0, то не следует повторять запрос до тех пор, пока не будет время, в секундах эпохи UTC, указанных заголовком x-ratelimit-reset . В противном случае дождитесь хотя бы одной минуты, прежде чем повторить попытку. Если запрос продолжает завершаться ошибкой из-за дополнительного ограничения скорости, подождите экспоненциально увеличивающееся время между повторными попытками и вызовите ошибку после определенного числа повторных попыток.

Продолжая делать запросы во время ограничения скорости, может привести к запрету интеграции.

Оставаться под ограничением скорости

Вы должны следовать рекомендациям, чтобы помочь вам оставаться под ограничениями скорости. См . раздел AUTOTITLE.

Вы также можете потоковую передачу журнала аудита для просмотра запросов API. Это поможет устранить неполадки интеграции, превышающие ограничение скорости. См . раздел AUTOTITLE.

Получение более высокого предела скорости

Если требуется более высокий уровень первичной скорости, рассмотрите возможность выполнения прошедших проверку подлинности запросов вместо неавторентированных запросов. Прошедшие проверку подлинности запросы имеют значительно более высокую скорость, чем запросы, не прошедшие проверку подлинности.

Если вы используете personal access token для автоматизации в организации, рассмотрите, будет ли вместо этого работать GitHub App . GitHub Apps, используемых учетными записями GitHub Enterprise Cloud, имеют более высокий предел скорости, чем personal access tokens. См . раздел AUTOTITLE.