Limite de nó
To pass schema validation, all GraphQL API calls must meet these standards:
- Os clientes devem fornecer um
primeiro
ouúltimo
argumento conexão. - Os valores de
primeiro
eúltimo
devem ser entre 1 e 100. - As chamadas individuais não podem solicitar mais de 500.000 nósno total.
Calcular nós em uma chamada
Estes dois exemplos mostram como calcular os nós totais em uma chamada.
-
Consulta simples:
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
-
Consulta complexa:
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
Limite de taxa
The GraphQL API limit is different from the REST API's rate limits.
Por que os limites de taxa de API são diferentes? Com o GraphQL, uma chamada do GraphQL pode substituir várias chamadas de REST. Uma chamada única e complexa do GraphQL poderia ser o equivalente a milhares de solicitações de REST. Embora uma única chamada GraphQL fique bem abaixo do limite de taxa de API REST, a consulta pode ser muito cara para os servidores do GitHub calcularem.
To accurately represent the server cost of a query, the GraphQL API calculates a call's rate limit score based on a normalized scale of points. Os fatores de pontuação de uma consulta no primeiro e último argumentos em uma conexão principal e suas conexões auxiliares.
- A fórmula usa argumentos
primeiros
eúltimo
na conexão principal e nas conexões secundárias para pré-calcular o potencial de carga nos sistemas do GitHub, como MySQL, ElasticSearch e Git. - Cada nova conexão tem o seu valor próprio de pontos. Os pontos são combinados com outros pontos da chamada para uma pontuação de limite de taxa geral.
The GraphQL API rate limit is 5,000 points per hour.
Note that 5,000 points per hour is not the same as 5,000 calls per hour: the GraphQL API and REST API use different rate limits.
Note: The current formula and rate limit are subject to change as we observe how developers use the GraphQL API.
Retornar o status de limite da chamada
With the REST API, you can check the rate limit status by inspecting the returned HTTP headers.
With the GraphQL API, you can check the rate limit status by querying fields on the rateLimit
object:
query {
viewer {
login
}
rateLimit {
limit
cost
remaining
resetAt
}
}
-
O campo
limite
retorna o número máximo de pontos que o cliente tem permissão para consumir em uma janela de 60 minutos. -
O campo
custo
retorna o custo do ponto para a chamada atual que conta contra o limite de taxa. -
O campo
restante
retorna o número de pontos restantes na janela de limite de taxa atual). -
O campo
resetAt
retorna o tempo em que a janela de limite de taxa atual é redefinida em segundos de satélite de UTC.
Calcular um limite de taxa antes de executar a chamada
Consultar o objeto rateLimit
retorna a pontuação de uma chamada, mas executar a chamada tem um custo para o limite. Para evitar esse dilema, você pode calcular a pontuação de uma chamada antes de executá-la. O cálculo a seguir funciona quase da mesma maneira que o que retorna taxteLimit { cost }
.
- Adicione o número de solicitações necessárias para atender cada conexão única na chamada. Assuma que todas solicitações atingirão os limites de argumento
primeiro
ouúltimo
. - Divida o número por 100 e arredonde o resultado para obter o custo agregado final. Esta etapa normaliza números grandes.
Note: The minimum cost of a call to the GraphQL API is 1, representing a single request.
Aqui está um exemplo de consulta e cálculo de pontuação:
query {
viewer {
login
repositories(first: 100) {
edges {
node {
id
issues(first: 50) {
edges {
node {
id
labels(first: 60) {
edges {
node {
id
name
}
}
}
}
}
}
}
}
}
}
}
Esta consulta exige que 5,101 solicitações sejam atendidas:
- Embora estejamos retornando 100 repositórios, a API tem que se conectar � conta do visualizador uma vez para obter a lista de repositórios. Portanto, solicitações para repositórios = 1
- Embora estejamos retornando 50 problemas, a API tem que se conectar a cada um dos 100 repositórios para obter a lista de problemas. Portanto, solicitações para problemas = 100
- Embora estejamos retornando 60 etiquetas, a API tem que se conectar a cada um dos 5.000 problemas potenciais totais para obter a lista de etiquetas. Portanto, solicitações de etiquetas = 5.000
- Total = 5.101
Se dividirmos por 100 e arredondar, o resultado nos dará a pontuação final da consulta: 51