Nouveau : Datasets open source gratuits disponibles !Decouvrir →
◻️
Web 12 min intermediaire

Les erreurs a eviter en GraphQL

Sommaire

Erreur 1 : Non-resolution des champs requis

Le problème

Un champ requis n'est pas correctement résolu dans la requête GraphQL. Par exemple :

query {
  user(id: "123") {
    name
    age
  }
}

Si age est un champ requis, mais non fourni, il sera ignoré et ne sera pas inclus dans la réponse.

Pourquoi c'est une erreur

  • Performance : Les requêtes qui ne récupèrent que des champs nécessaires sont généralement plus rapides.
  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux schémas et à leurs champs requis.
  • Sécurité : Ignorer un champ requis peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les champs requis sont inclus dans la requête. Par exemple :

query {
  user(id: "123") {
    name
    age
  }
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Ayez une convention de nommage pour les champs requis (par exemple, ajoutez un suffixe _required).
  • Documentez clairement les champs requis dans les schémas.

Erreur 2 : Utilisation de fragment inappropriés

Le problème

Un fragment est utilisé de manière incorrecte. Par exemple :

fragment UserFields on User {
  id
  name
}

query {
  user(id: "123") {
    ...UserFields
    age
    address
  }
}

Si age et address ne sont pas définis dans le fragment, ils seront ignorés.

Pourquoi c'est une erreur

  • Consistance : Les fragments doivent contenir des champs cohérents et réutilisables.
  • Maintenabilité : Les modifications apportées à un fragment peuvent affecter les requêtes qui l'utilisent.
  • Performance : Les requêtes qui utilisent des fragments inappropriés peuvent être inefficaces.

La solution

Assurez-vous que tous les champs inclus dans le fragment sont également accessibles via la requête. Par exemple :

fragment UserFields on User {
  id
  name
}

query {
  user(id: "123") {
    ...UserFields
    age
    address
  }
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les champs inclus dans chaque fragment.
  • Vérifiez régulièrement les requêtes qui utilisent des fragments.

Erreur 3 : Mutation sans retour

Le problème

Une mutation est effectuée sans que la réponse ne contienne d'informations sur le résultat. Par exemple :

mutation {
  createUser(name: "John Doe", email: "john.doe@example.com") {
    id
  }
}

Si aucune information n'est retournée, il est difficile de savoir si l'opération a réussi ou échoué.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux mutations et à leurs retours.
  • Performance : Les requêtes qui ne récupèrent que des informations basiques peuvent être inefficaces.
  • Sécurité : Ignorer le retour d'une mutation peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que la réponse de la mutation contient toutes les informations nécessaires. Par exemple :

mutation {
  createUser(name: "John Doe", email: "john.doe@example.com") {
    id
    name
    email
    createdAt
  }
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez clairement les informations retournées par chaque mutation.
  • Vérifiez régulièrement les mutations pour s'assurer qu'elles retournent toutes les informations nécessaires.

Erreur 4 : Non-utilisation des directives

Le problème

Les directives GraphQL ne sont pas utilisées de manière appropriée. Par exemple :

type Query {
  users: [User] @cacheControl(maxAge: 3600)
}

type User {
  id: ID!
  name: String!
}

Si la directive @cacheControl est utilisée sans paramètres, elle n'affecte pas le comportement de mise en cache.

Pourquoi c'est une erreur

  • Performance : Les directives doivent être utilisées pour améliorer les performances.
  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs paramètres.
  • Sécurité : Ignorer la mise en cache peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées avec des paramètres appropriés. Par exemple :

type Query {
  users: [User] @cacheControl(maxAge: 3600)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs paramètres.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 5 : Non-gestion des erreurs

Le problème

Une requête GraphQL est effectuée sans que la gestion des erreurs ne soit mise en place. Par exemple :

query {
  user(id: "123") {
    name
    age
  }
}

Si une erreur sur le serveur se produit, elle sera ignorée et la requête continuera.

Pourquoi c'est une erreur

  • Sécurité : Ignorer les erreurs peut potentiellement entraîner des informations non sécurisées.
  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux gestionnaires d'erreurs et à leurs paramètres.
  • Performance : Les requêtes qui ne gèrent pas les erreurs peuvent être inefficaces.

La solution

Assurez-vous que toutes les requêtes incluent la gestion des erreurs. Par exemple :

query {
  user(id: "123") {
    name
    age
  }
} @errorPolicy("ignore")

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les gestionnaires d'erreurs.
  • Vérifiez régulièrement les requêtes pour s'assurer qu'elles incluent la gestion des erreurs.

Erreur 6 : Non-utilisation de l'instruction @deprecated

Le problème

Un champ ou une mutation est marqué comme déprécié, mais aucune information n'est fournie. Par exemple :

type Query {
  oldUser(id: ID!): User @deprecated(reason: "Use the new user field instead.")
}

type User {
  id: ID!
  name: String!
}

Si le champ est utilisé dans une requête, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux champs et à leurs états de dépréciation.
  • Performance : Les requêtes qui utilisent des champs dépréciés peuvent être inefficaces.
  • Sécurité : Ignorer le dépréciation d'un champ peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les instructions @deprecated incluent un raison explicite. Par exemple :

type Query {
  oldUser(id: ID!): User @deprecated(reason: "Use the new user field instead.")
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les raisons de dépréciation.
  • Vérifiez régulièrement les champs et mutations pour s'assurer qu'ils ne sont pas dépréciés inutilement.

Erreur 7 : Non-utilisation des interfaces

Le problème

Une interface est définie, mais elle n'est jamais utilisée. Par exemple :

interface Node {
  id: ID!
}

type User implements Node {
  id: ID!
  name: String!
}

Si l'interface n'est jamais utilisée dans une requête ou une mutation, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux interfaces et à leurs implémentations.
  • Performance : Les requêtes qui ne utilisent pas d'interfaces peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une interface peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les interfaces sont utilisées dans une requête ou une mutation. Par exemple :

interface Node {
  id: ID!
}

type User implements Node {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les interfaces et leurs implémentations.
  • Vérifiez régulièrement les interfaces pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 8 : Non-utilisation des types énumération

Le problème

Un type énumération est défini, mais il n'est jamais utilisé. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
  status: Status!
}

Si le type énumération n'est jamais utilisé dans une requête ou une mutation, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types énumération et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types énumération peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type énumération peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types énumération sont utilisés dans une requête ou une mutation. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
  status: Status!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types énumération et leurs utilisations.
  • Vérifiez régulièrement les types énumération pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 9 : Non-utilisation des directives de résolution

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 10 : Non-utilisation des types union

Le problème

Un type union est défini, mais il n'est jamais utilisé. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Si le type union n'est jamais utilisé dans une requête ou une mutation, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types union et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types union peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type union peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types union sont utilisés dans une requête ou une mutation. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types union et leurs utilisations.
  • Vérifiez régulièrement les types union pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 11 : Non-utilisation des directives d'inclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 12 : Non-utilisation des directives d'exclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @skip(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @skip(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 13 : Non-utilisation des types d'énumération

Le problème

Un type énumération est défini, mais il n'est jamais utilisé. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
}

Si le type énumération n'est jamais utilisé, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types énumération et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types énumération peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type énumération peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types énumération sont utilisés dans une requête ou une mutation. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types énumération et leurs utilisations.
  • Vérifiez régulièrement les types énumération pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 14 : Non-utilisation des directives de résolution

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 15 : Non-utilisation des types union

Le problème

Un type union est défini, mais il n'est jamais utilisé. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Si le type union n'est jamais utilisé dans une requête ou une mutation, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types union et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types union peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type union peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types union sont utilisés dans une requête ou une mutation. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types union et leurs utilisations.
  • Vérifiez régulièrement les types union pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 16 : Non-utilisation des directives d'inclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 17 : Non-utilisation des directives d'exclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @skip(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @skip(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 18 : Non-utilisation des types d'énumération

Le problème

Un type énumération est défini, mais il n'est jamais utilisé. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
}

Si le type énumération n'est jamais utilisé, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types énumération et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types énumération peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type énumération peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types énumération sont utilisés dans une requête ou une mutation. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types énumération et leurs utilisations.
  • Vérifiez régulièrement les types énumération pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 19 : Non-utilisation des directives de résolution

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 20 : Non-utilisation des types union

Le problème

Un type union est défini, mais il n'est jamais utilisé. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Si le type union n'est jamais utilisé dans une requête ou une mutation, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types union et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types union peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type union peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types union sont utilisés dans une requête ou une mutation. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types union et leurs utilisations.
  • Vérifiez régulièrement les types union pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 21 : Non-utilisation des directives d'inclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 22 : Non-utilisation des directives d'exclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @skip(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @skip(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 23 : Non-utilisation des types d'énumération

Le problème

Un type énumération est défini, mais il n'est jamais utilisé. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
}

Si le type énumération n'est jamais utilisé, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types énumération et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types énumération peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type énumération peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types énumération sont utilisés dans une requête ou une mutation. Par exemple :

enum Status {
  ACTIVE
  INACTIVE
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types énumération et leurs utilisations.
  • Vérifiez régulièrement les types énumération pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 24 : Non-utilisation des directives de résolution

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la résolution d'un champ. Par exemple :

directive @customResolver on FIELD_DEFINITION

type Query {
  user(id: ID!): User @customResolver
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 25 : Non-utilisation des types union

Le problème

Un type union est défini, mais il n'est jamais utilisé. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Si le type union n'est jamais utilisé dans une requête ou une mutation, il sera ignoré.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux types union et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de types union peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'un type union peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que tous les types union sont utilisés dans une requête ou une mutation. Par exemple :

union SearchResult = User | Post

type Query {
  search(query: String!): SearchResult!
}

type User {
  id: ID!
  name: String!
}

type Post {
  id: ID!
  title: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les types union et leurs utilisations.
  • Vérifiez régulièrement les types union pour s'assurer qu'ils sont utilisés de manière appropriée.

Erreur 26 : Non-utilisation des directives d'inclusion

Le problème

Une directive est définie, mais elle n'est jamais utilisée dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Si la directive n'est jamais utilisée, elle sera ignorée.

Pourquoi c'est une erreur

  • Maintenabilité : Il peut être difficile de suivre les modifications apportées aux directives et à leurs utilisations.
  • Performance : Les requêtes qui ne utilisent pas de directives peuvent être inefficaces.
  • Sécurité : Ignorer l'utilisation d'une directive peut potentiellement entraîner une information non sécurisée.

La solution

Assurez-vous que toutes les directives sont utilisées dans la requête. Par exemple :

directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT

type Query {
  user(id: ID!): User @include(if: $isAdmin)
}

type User {
  id: ID!
  name: String!
}

Comment prévenir

  • Utilisez ESLint avec le plugin eslint-plugin-graphql.
  • Documentez les directives et leurs utilisations.
  • Vérifiez régulièrement les directives pour s'assurer qu'elles sont utilisées de manière appropriée.

Erreur 2

Un projet tech a lancer ?

Besoin d'un accompagnement ? Decrivez votre projet pour des recommandations.

Recevoir des conseils

Questions frequentes

Quelle est la différence entre une erreur GraphQL et une erreur HTTP ?
Une erreur GraphQL indique un problème spécifique avec la requête, tandis qu'une erreur HTTP indique un problème avec la communication en elle-même.
Comment éviter les erreurs de frappe dans les noms des champs de requête GraphQL ?
Pour éviter les erreurs de frappe, utilisez une autocomplétion efficace et vérifiez attentivement chaque champ lors de la saisie de votre requête.
Quelles sont les meilleures pratiques pour gérer les erreurs en production avec GraphQL ?
En production, utilisez des logs détaillés pour diagnostiquer les erreurs, et assurez-vous que les messages d'erreur ne contiennent pas d'informations sensibles. Offrez également une interface utilisateur améliorée pour afficher les erreurs de manière claire et utile aux utilisateurs finaux.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.