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.
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.
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"})
À 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.
fonctionnaire graphql-ruby Comment gérer les erreurs dans GraphQL
Recommended Posts