Skip to main content

Limites de débit et limites de requête pour l’API GraphQL

L’API GraphQL GitHub a des limitations en place pour se protéger d’appels excessifs ou abusifs aux serveurs de GitHub.

Limite du taux principal

Les limites de taux sont désactivées par défaut pour GitHub Enterprise Server. Contactez l'administrateur de votre site afin de confirmer les limites de débit pour votre instance.

Si vous êtes administrateur de site, vous pouvez définir des limites de débit pour votre instance. Pour plus d’informations, consultez « Configuration des limites de débit ».

Si vous développez une application pour des utilisateurs ou des organisations en dehors de votre instance, les limites de débit standard de GitHub s'appliquent. Pour en savoir plus, consultez Limites de débit et limites de requête pour l’API GraphQL dans la documentation GitHub Free.

Limite du nombre de nœuds

Pour passer la validation de schéma, tous les appels d’API GraphQL doivent respecter les standards suivants :

  • Les clients doivent fournir un argument first ou last sur toute connexion.
  • Les valeurs de first et last doivent être comprises entre 1 et 100.
  • Des appels individuels ne peuvent pas demander plus de 500 000 nœuds au total.

Calcul des nœuds dans un appel

Les deux exemples suivants montrent comment calculer le nombre total de nœuds dans un appel.

  1. Requête simple :

    query {
      viewer {
        repositories(first: 50) {
          edges {
            repository:node {
              name
    
              issues(first: 10) {
                totalCount
                edges {
                  node {
                    title
                    bodyHTML
                  }
                }
              }
            }
          }
        }
      }
    }

    Calcul :

    50         = 50 repositories
     +
    50 x 10  = 500 repository issues
    
                = 550 total nodes
  2. Requête complexe :

    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
            }
          }
        }
      }
    }

    Calcul :

    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

Stratégies d’optimisation des requêtes

  • Limitez le nombre d’objets : utilisez des valeurs plus petites pour les arguments first ou last et paginez les résultats.
  • Réduire la profondeur des requêtes : évitez de demander des objets fortement imbriqués sauf si nécessaire.
  • Filtrer les résultats : utilisez des arguments pour filtrer les données et ne renvoyer que ce dont vous avez besoin.
  • Fractionner les requêtes volumineuses : divisez les requêtes complexes en plusieurs requêtes plus simples.
  • Ne demander que les champs nécessaires : sélectionnez uniquement les champs dont vous avez besoin, au lieu de demander tous les champs disponibles.

En suivant ces stratégies, vous pouvez réduire le risque d’atteindre les limites de ressources et améliorer les performances et la fiabilité de vos requêtes API.