Skip to main content

Ограничения скорости и ограничения запросов для API GraphQL

API GraphQL GitHub имеет ограничения для защиты от чрезмерных вызовов к серверам GitHub или злоупотребления ими.

Ограничение основной скорости

Ограничения скорости отключены по умолчанию для GitHub Enterprise Server. Обратитесь к администратору сайта, чтобы подтвердить ограничения скорости для вашего экземпляра.

Если вы являетесь администратором сайта, вы можете задать ограничения скорости для вашего экземпляра. Дополнительные сведения см. в разделе Настройка ограничений скорости.

Если вы разрабатываете приложение для пользователей или организаций вне вашего экземпляра, применяются стандартные ограничения GitHub. Дополнительные сведения см. в документации по GitHub Free.

Предельное число узлов

Для прохождения валидации schema все API GraphQL calls должны соответствовать следующим стандартам:

  • Клиенты должны предоставить аргумент first или last по любому связи.
  • Значения first и last должны находиться в пределах 1–100.
  • Отдельные звонки не могут запрашивать более 500 000 узлов.

Подсчет узлов в вызове

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

  1. Простой запрос:

    query {
      viewer {
        repositories(first: 50) {
    

edges { repository:node { name

issues(first: 10) { totalCount edges { node { title bodyHTML } } } } } } } }

Расчет:

50         = 50 repositories
    +
   50 x 10  = 500 repository issues

= 550 total nodes
  1. Сложный запрос:

    query {
      viewer {
        repositories(first: 50) {
    

edges { repository:node { name

pullRequests(first: 20) { edges { pullRequest:node { title

comments(first: 10) { edges { comment:node { bodyHTML } } } } } }

issues(first: 20) { totalCount edges { issue:node { title bodyHTML

comments(first: 10) { edges { comment:node { bodyHTML } } } } } } } } }

   followers(first: <span class="bluebox">10</span>) {

edges { follower:node { login } } } } }

Расчет:

50              = 50 repositories
    +
   50 x 20       = 1,000 pullRequests
    +
   50 x 20 x 10 = 10,000 pullRequest comments
    +
   50 x 20       = 1,000 issues
    +
   50 x 20 x 10 = 10,000 issue comments
    +
   10              = 10 followers

= 22,060 total nodes

Стратегии оптимизации запросов

  • Ограничение количества объектов: используйте меньшие значения для first или last аргументов и размыкайтесь по результатам.
  • Уменьшите глубину запроса: не запрашивайте глубоко вложенные объекты, если это не необходимо.
  • Результаты фильтрации: используйте аргументы для фильтрации данных и возврата только необходимых данных.
  • Разделение больших запросов: разбиение сложных запросов на несколько простых запросов.
  • Запрос только обязательных полей: выберите только нужные поля, а не запрос всех доступных полей.

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