Il n'est pas complété par le "graphène" lui-même, mais en fait, des bibliothèques telles que "graphql-core" et "graphql-relay" sont cachées sous "graphene". GraphQL est un portage de graphql-core car il est populaire dans l'environnement JavaScript depuis sa création. La bibliothèque principale, graphql
, est plus facile à utiliser en termes de python, et est appelée graphène
. Quand vous pensez "il n'y a pas assez de description" dans le document graphène
, c'est en fait la partie explication de la bibliothèque inférieure. Finalement, vous pouvez trouver la réponse en retournant à Implémentation de référence.
La procédure de définition du champ de graphène est facile à ajouter avec mixin. Le style mixin est recommandé car il peut être un piège lorsque vous essayez d'utiliser l'héritage de classe.
graphene.relay
: Le relais lui-même est une spécification supplémentaire basée sur GraphQL. Comme il est largement utilisé, il est moins déroutant de le traiter fondamentalement. Les interfaces «Connection» et «Node» se démarquent.
Node interface
Dans Node
, un seul objet peut être extrait de ʻid` via une requête de nœud. Comme il n'est pas visible par défaut, Préparez si nécessaire. Si un tel chemin d'accès n'est pas souhaitable (pour des raisons de sécurité, par exemple), l'implémentation peut être omise.
Vous pouvez importer avec graphene.Node
sans accéder avec graphene.relay.Node
.
Connection interface
Total_count
of Connection
n'est pas pris en charge par la bibliothèque. Si vous vous en occupez séparément, il y aura moins de problèmes. Par exemple, graphène-sqlalchemy peut devoir être dérivé de l'objet de requête, il est donc présumé qu'il est intentionnellement isolé.
https://github.com/graphql-python/graphene/issues/776 https://github.com/graphql-python/graphene-django/issues/162
Avec le support de relay.Connection
, les métadonnées du côté relay.Node
sont supposées déclarer qu'elles prennent en charge les interfaces Node
.
Dans graphene_sqlalchemy.SQLAlchemyConnection
, si vous mettez une déclaration d'interfaceNode
, cela provoquera une double définition, alors faites-le bien (actuellement, il semble bon de survivre avec une réponse de type hack).
Vous pouvez sortir du trap d'ordre de déclaration en retardant le premier argument de ConnectionField avec lambda:.
Recommended Posts