Rate limits et limites de requêtes pour l’API GraphQL
L’API GraphQL d’ARISE est soumise à des restrictions visant à empêcher les appels excessifs ou abusifs vers nos serveurs.
Rate limits
Un rate limit représente une limitation du nombre de requête réalisable en un temps imparti.
Note
ARISE n’implémente actuellement pas de rate limit. Toutefois, en cas d’utilisation abusive de l’API, ARISE se réserve le droit d’imposer des sanctions.
Analyse d’une requête
Chaque requête est accompagnée d’une partie extensions et plus particulièrement
analyzer.
| Attribut | Limite | Description |
|---|---|---|
complexity | \(2048\) | Complexité totale de la requête, calculée en parcourant l’arbre syntaxique. Le coût est proportionnel au nombre direct d’attribut enfants, il est donc facile d’obtenir une complexité exponentielle. |
depth | \(16\) | Profondeur maximale de la requête |
Si une des deux limites est atteinte, la réponse sera :
{
"data": null,
"errors": [
{
"message": "Query is too complex."
}
]
}
Formule de complexité
Un champ simple aura pour complexité \( 0 \).
Toute requête faisant un appel en base de donnée aura pour complexité :
\[ Complexité_{défaut} = 3 \]
Tout attribut faisant un appel en base de donnée groupé (batch) aura pour complexité :
\[ Complexité_{batch} = Complexité_{défaut} + Complexité_{attribut} + 1 \]
Toute requête paginée d’une taille \( N \) aura pour complexité :
\[ Complexité_{pagination}(N) = Complexité_{défaut} + \sum_{i=0}^{N} (Complexité_{attribut_i} + 1) \]
Enfin, les requêtes non paginées mais retournant un nombre inconnu d’élément (par exemple, allPlatforms) auront pour complexité :
\[ Complexité_{inconnue} = 50 \]
Warning
La limite de complexité a pour but de limiter les usages abusifs et les dénis de service (DOS). ARISE se réserve le droit de changer le calcul de cette limite.
Exemple
query Profile {
profile {
id
nickname
schoolYear
isFipa: group(group: {id: "fisa"}) {
role {
value
}
}
}
}
profile = 3 + (
id = 0
nickname = 0
schoolYear = batch(1) = 3 + 1 + 1 = 5
group = batch(
role = 0 + (
value = 0
)
) = 3 + 0 + 1
)