Skip to main content

Límites de frecuencia y consulta para GraphQL API

La API de GraphQL de GitHub cuenta con limitaciones para la protección contra las llamadas excesivas o abusivas a los servidores de GitHub.

Límite de volumen principal

Los límites de frecuencia están deshabilitados de manera predeterminada para GitHub Enterprise Server. Contacta a tu administrador de sitio para confirmar los límites de frecuencia de tu instancia.

Si eres administrador de un sitio, puedes definir los límites de volumen de la instancia. Para más información, consulta Configuración de los límites de frecuencia.

Si vas a desarrollar una aplicación para usuarios u organizaciones fuera de la instancia, se aplican los límites de volumen estándar de GitHub. Para más información, consulta Límites de frecuencia y consulta para GraphQL API en la documentación de GitHub Free.

Límite de nodos

Para pasar la validación del esquema, todas las llamadas de GraphQL API deben cumplir estos estándares:

  • Los clientes deben proporcionar un argumento first o last en cualquier conexión.
  • Los valores de first y last deben estar comprendidos entre 1 y 100.
  • Las llamadas individuales no pueden solicitar más de un total de 500 000 nodos.

Calcular los nodos en una llamada

Estos dos ejemplos te muestran cómo calcular los nodos totales en una llamada.

  1. Consulta simple:

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

    Cálculo:

    50         = 50 repositories
     +
    50 x 10  = 500 repository issues
    
                = 550 total nodes
  2. Consulta compleja:

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

    Cálculo:

    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

Estrategias de optimización de consultas

  • Limitación del número de objetos: usa valores más pequeños para los argumentos first o last, y pagina los resultados.
  • Reducción de la profundidad de consulta: evita solicitar objetos profundamente anidados a menos que sea necesario.
  • Filtrado de los resultados: usa argumentos para filtrar datos y devolver solo lo que necesitas.
  • División de consultas grandes: divide las consultas complejas en varias consultas más sencillas.
  • Solicitud de los campos obligatorios exclusivamente: selecciona solo los campos que necesites, en lugar de solicitar todos los campos disponibles.

Si sigues estas estrategias, puedes reducir la probabilidad de alcanzar los límites de recursos y mejorar el rendimiento y la confiabilidad de las solicitudes de API.