Ограничение основной скорости
Ограничения скорости отключены по умолчанию для GitHub Enterprise Server. Обратитесь к администратору сайта, чтобы подтвердить ограничения скорости для вашего экземпляра.
Если вы являетесь администратором сайта, вы можете задать ограничения скорости для вашего экземпляра. Дополнительные сведения см. в разделе Настройка ограничений скорости.
Если вы разрабатываете приложение для пользователей или организаций вне вашего экземпляра, применяются стандартные ограничения GitHub. Дополнительные сведения см. в документации по GitHub Free.
Предельное число узлов
Для прохождения валидации schema все API GraphQL calls должны соответствовать следующим стандартам:
- Клиенты должны предоставить аргумент
firstилиlastпо любому связи. - Значения
firstиlastдолжны находиться в пределах 1–100. - Отдельные звонки не могут запрашивать более 500 000 узлов.
Подсчет узлов в вызове
В этих двух примерах показано, как вычислить общее количество узлов в вызове.
-
Простой запрос:
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
-
Сложный запрос:
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: 10) { 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.