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.