Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

{
  "data": {
    "profile": {
      "id": "acier2020",
      "nickname": "Steel",
      "schoolYear": 6,
      "isFipa": null
    }
  },
  "extensions": {
    "analyzer": {
      "complexity": 42,
      "depth": 4
    }
  }
}
AttributLimiteDescription
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
)