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

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

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

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

Если вы являетесь администратором сайта, вы можете задать ограничения скорости для вашего экземпляра. Дополнительные сведения см. в разделе [Настройка ограничений скорости](/ru/enterprise-server@3.22/admin/configuring-settings/configuring-user-applications-for-your-enterprise/configuring-rate-limits).

Если вы разрабатываете приложение для пользователей или организаций вне вашего экземпляра, применяются стандартные GitHub тарифные ограничения. Для получения дополнительной информации см. [раздел AUTOTITLE](/ru/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api) в GitHub Free документации.

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

Для прохождения валидации [schema](/ru/enterprise-server@3.22/graphql/guides/introduction-to-graphql#schema) все API GraphQL [calls](/ru/enterprise-server@3.22/graphql/guides/forming-calls-with-graphql) должны соответствовать следующим стандартам:

* Клиенты должны предоставить аргумент `first` или `last` по любому [связи](/ru/enterprise-server@3.22/graphql/guides/introduction-to-graphql#connection).
* Значения `first` и `last` должны находиться в пределах 1–100.
* Отдельные звонки не могут запрашивать более 500 000 [узлов](/ru/enterprise-server@3.22/graphql/guides/introduction-to-graphql#node).

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

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

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

   <pre>query {
     viewer {
       repositories(first: <span class="redbox">50</span>) {

edges {
repository:node {
name

issues(first: <span class="greenbox">10</span>) {
totalCount
edges {
node {
title
bodyHTML
}
}
}
}
}
}
}
}</pre>

Расчет:

   <pre><span class="redbox">50</span>         = 50 repositories
    +
   <span class="redbox">50</span> x <span class="greenbox">10</span>  = 500 repository issues

= 550 total nodes</pre>

1. Сложный запрос:

   <pre>query {
     viewer {
       repositories(first: <span class="redbox">50</span>) {

edges {
repository:node {
name

pullRequests(first: <span class="greenbox">20</span>) {
edges {
pullRequest:node {
title

comments(first: <span class="bluebox">10</span>) {
edges {
comment:node {
bodyHTML
}
}
}
}
}
}

issues(first: <span class="greenbox">20</span>) {
totalCount
edges {
issue:node {
title
bodyHTML

comments(first: <span class="bluebox">10</span>) {
edges {
comment:node {
bodyHTML
}
}
}
}
}
}
}
}
}

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

edges {
follower:node {
login
}
}
}
}
}</code></pre>

Расчет:

   <pre><span class="redbox">50</span>              = 50 repositories
    +
   <span class="redbox">50</span> x <span class="greenbox">20</span>       = 1,000 pullRequests
    +
   <span class="redbox">50</span> x <span class="greenbox">20</span> x <span class="bluebox">10</span> = 10,000 pullRequest comments
    +
   <span class="redbox">50</span> x <span class="greenbox">20</span>       = 1,000 issues
    +
   <span class="redbox">50</span> x <span class="greenbox">20</span> x <span class="bluebox">10</span> = 10,000 issue comments
    +
   <span class="bluebox">10</span>              = 10 followers

= 22,060 total nodes</pre>

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

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

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