[RAILS] Gestion des erreurs avec Graphql-ruby

introduction

Récemment, j'ai implémenté une API avec graphql-ruby. Par conséquent, j'ai recherché la meilleure pratique pour la gestion des erreurs dans graphql. Je ne fais que commencer, il y a donc une meilleure façon! Nous recherchons des commentaires.

Classification des erreurs

Avant de passer à l'implémentation de la gestion des erreurs, il existe plusieurs types d'erreurs, alors laissez-moi vous les présenter. Les articles suivants sont très faciles à comprendre et à organiser, je me réfère donc à eux.

Concept de gestion des erreurs (conception d'exception) dans l'application Rails

Ici, il est classé en deux types, système anormal et système quasi-anormal, comme suit.

--Système anormal: erreur nw ou erreur de programme (erreur système) --Système semi-anormal: erreur à laquelle le créateur peut s'attendre (erreur commerciale)

Il existe les conditions suivantes pour ces deux types d'erreurs.

Le fait est que le système anormal affiche le message du modèle fixe, mais le système quasi-anormal envoie le message depuis l'API. Le principal problème est de savoir comment mettre en œuvre cette exigence.

Spécifications Graphql-ruby

Dans graphql-ruby, en cas d'erreur, json avec les erreurs suivantes car la clé est retournée.

"errors": [
    {
      "message": "error message",
      "locations": [],
      "extensions": {
        "code": "ERROR_CODE"
      }
    }
  ]

Ce message d'erreur est principalement causé par des bogues dans l'interface. Par exemple, lorsque null est inclus dans l'argument passé au recto.

L'erreur ci-dessus peut également être générée en écrivant le code directement comme suit.

sample.ruby


raise GraphQL::ExecutionError.new('error message', extensions: {code: "ERROR_CODE"})

la mise en oeuvre

À partir des spécifications ci-dessus, on peut voir que les erreurs sont renvoyées comme valeur de retour pour les erreurs anormales. Alors qu'en est-il du système quasi-anormal? Les exigences pour le système quasi-anormal sont les suivantes.

La première condition est correcte car vous pouvez transmettre un message d'erreur en levant l'erreur graphql ci-dessus. Cependant, tel quel, il ne peut être distingué d'une erreur anormale sur la face avant.

J'ai donc décidé de personnaliser json comme suit.

sample.ruby


raise GraphQL::ExecutionError.new('error message', extensions: {customCode: "ERROR_CODE"})

C'est code-> customCode. Au recto, si customCode existe en tant que clé, un message d'erreur s'affiche tel quel. En dehors de cela, en affichant le message du modèle, il est possible de séparer le traitement du système anormal et du système quasi-anormal.

Matériel de référence

fonctionnaire graphql-ruby Comment gérer les erreurs dans GraphQL

Recommended Posts

Gestion des erreurs avec Graphql-ruby
Conseils pour la gestion des erreurs de gRPC dans Ruby
Évitez l'erreur que Yuma a donnée en Java
Erreur rencontrée lors de l'implémentation de la fonction de balisage
Utiliser MouseListener avec le traitement
Gestion des erreurs avec Graphql-ruby
NameError in Incomes # index error
Erreur ActiveRecord :: NotNullViolation dans Devise
[Ruby] Gestion des exceptions dans les fonctions
erreur npm dans le didacticiel docker
Erreur de connexion à la base de données Spring
Techniques de gestion des exceptions en Java
[Rails] Erreur de validation inattendue dans l'appareil
Erreur 411: longueur requise dans la communication SOAP
Erreur dans ./gradlew: symbole introuvable
Conseils pour la gestion des énumérations avec thymeleaf
Erreur rencontrée lors de l'implémentation de la fonction de balisage
Conseils pour gérer les pseudo-éléments dans Selenium
Erreur de mise en œuvre lors de la mise en œuvre de la validation Spring
Console Rails Gestion des erreurs de valeur de chaîne incorrecte
Ajouter si non dans l'ensemble, message d'erreur si
Comment afficher les messages d'erreur en japonais
Installez letsencrypt dans le fichier de clés du certificat java (2e réponse à l'erreur d'échec de la construction du chemin PKIX)
Conseils pour la gestion des erreurs de gRPC dans Ruby